标题不是很贴切!
程序是这样的:
一个线程负责从串口实时采集数据,得到数据后通过委托调用主线程中接口,通知数据来到,主线程中该接口(函数)处理得到的数据!
数据采集每秒25次,每次30个字节!
数据处理函数要进行数据的实时显示,曲线实时绘制,系统的状态检测等工作!现在问题是这样的:
1.如果状态检测检测出报警信息,根据设计要弹出对话框(我用的是system.windows.form.messagebox.show),但当对话框弹出后,好像数据处理的那个函数就不工作了,结果点击报警消息确定后系统就挂了。
2.调试时,如果数据正在采集,当从调试切换到运行状态(F5)后,系统又挂了!个人觉得可能是由于数据采集比较“娇气”,当有其它操作打断它的进行(就是主线程接受处理函数),它就不干了,呵呵!请大家帮忙指点一下,看看该如何解决!可贴出代码供分析!
程序是这样的:
一个线程负责从串口实时采集数据,得到数据后通过委托调用主线程中接口,通知数据来到,主线程中该接口(函数)处理得到的数据!
数据采集每秒25次,每次30个字节!
数据处理函数要进行数据的实时显示,曲线实时绘制,系统的状态检测等工作!现在问题是这样的:
1.如果状态检测检测出报警信息,根据设计要弹出对话框(我用的是system.windows.form.messagebox.show),但当对话框弹出后,好像数据处理的那个函数就不工作了,结果点击报警消息确定后系统就挂了。
2.调试时,如果数据正在采集,当从调试切换到运行状态(F5)后,系统又挂了!个人觉得可能是由于数据采集比较“娇气”,当有其它操作打断它的进行(就是主线程接受处理函数),它就不干了,呵呵!请大家帮忙指点一下,看看该如何解决!可贴出代码供分析!
解决方案 »
- C#控制台中怎么把从.txt文档中读取出来的信息全部存进哈希表中
- 怎样利用 mshtml.IHTMLElementCollection 点击链接
- 加锁
- 同一按钮第二次事件
- aspx中如何分割頁面,也就是把頁面分成幾個區域?
- groupbox焦点问题
- 问个奇怪的问题,关于 Enum 的,请进... ...
- 第一次用dateset,求教数据库更新的问题,十分感谢
- winform:修改datagrid的某项值后自动计算结果同时更新另一项值?
- 请问各位,问一个难了不会,会了不难的问题,怎么用C#访问局与网的VF数据库???
- .ascx文件如何读取MasterPage中控件?(ContentPlaceHolder)this.Parent.FindControl("ContentPlaceHolder1")?
- C#中用什么来做报表?
改成,自己写个报警的form1,再来调用form1.show();
这样主系统就暂停了
to qiri07(俺家金毛de地位比俺高) :该如何对线程进行控制?我现在基本没有对线程作什么处理!
to liujia_0421(SnowLover):采集程序的日志如何写呢?怎样记录?在何处记录才能捕捉到问题呢?
to wls12342004(青青子木) :我曾经写了一个FORM,但采用FORM.SHOW方法后,当时好像是不刷新了,我再试下!!
你用try{}catch{}模式,跟踪调试,看看问题出在什么地方,注意,断点要设置在catch所有的行号!!!
上面这个人和你问的很像除了SendMessage我没试之外别的都试过了,明确的告诉楼主,只要在工作线程显示模态窗口就会阻塞线程(包括回调和自定义事件),线程就会停在那里不做别的事了;
如果非模态的话窗口倒是没关系;
to zhaoyingqi(芹菜):我也想实现类似非模式对话框,但没找到实现的途径!
to All:现在我加了一个定时器,定时检测状态!这样虽然可以弹出对话框并且主线程不挂,但又加了一个定时,性能差了些,而且与当初的设计背离!最重要的是,采集操作还是容易被打断,经常不知道原因的挂掉。现在采取的办法是,每当进行比较耗费时间的操作,比如存取数据库、打开文件对话框(这个我一直很纳闷,为什么我调用打开文件对话框系统经常会挂呢?这个操作不会那么复杂吧?它是系统的东西啊)等,我都是先把采集线程停掉,然后等待操作完成后再继续采集!该如何解决,请各位帮忙看看
感觉楼主线程设计上有点问题
给个设计建议设定一个循环缓冲区Buf
采集线程B从串口采集数据,写入缓冲区
主线程A从缓冲区Buf读取数据,处理、显示、检测(不要显示Dialog如果非要显示Dialog,再开线程C)
也就是A、B线程都不能被阻塞这里牵扯到缓冲区读写并发问题,一般操作系统的书籍中都能找到
to crossrowman(godi) :我现在没有设置循环缓冲区,有数据过来后,我直接调用主线程接收函数进行数据处理!调用机制采用委托实现,采集线程与主现成都没被组塞(呵呵,应该是)!不过再设置一个缓冲区是个好主意,我考虑下!