hanatech 发表于 2015-7-12 16:35:00

ActiveReport与COM串口有冲突?

在地磅磅房现场测试发现:当COM串口初始化成功并能接收数据,报表加载非常慢,甚至要2-3分钟才能加载完,用stopwatch监控,发现报表加载和数据源加载都正常,只要不COM串口,报表加载正常,求解决?

frank.zhang 发表于 2015-7-13 10:14:00

您好,
非常抱歉。
AR产品的主要功能是展示数据。
通过您的描述,不使用串口报表加载正常,我们这边推测是串口读取数据超时导致的。
建议您可以现将数据保存至数据库,例如sqlite,报表展示时使用数据库作为数据源。能是否对问题做进一步的确认。

希望能够帮助到您。

hanatech 发表于 2015-7-13 13:08:00

数据是先存到数据库的,微软自带的报表没有这种情况。。。我准备给你们上传demo

hanatech 发表于 2015-7-13 13:12:00

Activerport与COM串口demo

这是我们在现场测试用的DEMO,发现,串口数据引入之后,报表加载很慢

frank.zhang 发表于 2015-7-13 15:04:00

您好,
你的例子程序,我这边已经运行起来。有两个问题想跟您沟通一下:
1.串口接收数据时,需要触发spWeight_DataReceived,这个事件是谁触发的?
2.在这个方法中,Thread.Sleep(250),如果频繁被触发,是否会导致主UI线程的卡顿。是否可以考虑将这个逻辑放到线程当中。

hanatech 发表于 2015-7-14 09:33:00

1、主UI线程并未卡顿

hanatech 发表于 2015-7-14 09:33:00

2、实际程序是放在线程中。
3、RDLC并未有问题。

frank.zhang 发表于 2015-7-14 14:02:00

您好,
我们对您的代码进行分析,有两个建议:
1.您的串口操作中执行了Control.CheckForIllegalCrossThreadCalls = false;
这句会影响AR的显示,在AR中使用了多线程技术。
2.将串口线程移动到后台后可以使用
if(this.LEDNum.InvokeRequired)
{
this.Invoke(new Action(()=> this.LEDNum.Text = Convert.ToDecimal(data).ToString()));

else 
{
this.LEDNum.Text = Convert.ToDecimal(data).ToString();
}

多线程问题是一个通用的技术问题,网上有一些参考资料,您可以参考:
http://www.cnblogs.com/yizhu2000/archive/2008/01/03/1011958.html
http://www.cnblogs.com/wangshenhe/archive/2012/05/25/2516842.html

如果您的问题没有解决的话,请给我们一个能够重现这个问题的例子程序。我们可以更快的定位问题。
希望能够帮助到您。

frank.zhang 发表于 2015-7-24 09:14:00

为了给你提供更优质的服务,请对本次服务进行评分。
我们会认真对待你提出的宝贵意见,谢谢
http://gcdn.gcpowertools.com.cn/attachment.aspx?attachmentid=10062
页: [1]
查看完整版本: ActiveReport与COM串口有冲突?