主题:请教大侠:在频繁的串口操作中,程序界面会假死
bestiddv
[专家分:0] 发布于 2008-04-21 16:16:00
在频繁的串口操作中,程序界面会出现假死状况。如何才能够使程序在处理串口通信时,
界面仍然可以操作呢?
谢谢!
回复列表 (共6个回复)
沙发
orangelegend [专家分:860] 发布于 2008-04-22 00:50:00
再开一个线程。
用于处理串口。
板凳
bestiddv [专家分:0] 发布于 2008-04-22 23:14:00
谢谢了先。
不好意思啊,我问过一个软件开发员,他说这样的话界面还是会假死
冒昧的问您您确定吗?
谢谢~~
3 楼
billows_335 [专家分:30] 发布于 2008-04-23 10:00:00
我觉得一楼说的可以。前几天做了个东西,往TreeView中填充大量数据时,导致画面假死。
最后了两个线程交互。
线程1,处理需要填充的数据。(不要在这里过多处理画面上的东西)
线程2,等待线程1处理完,在填充。
经过这样处理以后,后台填充数据时,程序界面,保持原来状态,可以随意操作。
我觉得我遇到的问题和你类似,可以参考一下
4 楼
bestiddv [专家分:0] 发布于 2008-05-05 13:59:00
首先谢谢这位大侠,最近比较忙,给分晚了,不好意思,请原谅。
由于我的程序中有很多处的Thread.sleep(),而又要和UI界面交互,
所以我用委托,而我发现委托中Thread.sleep()是在主线程中执行的,所以界面还是会假死。下面是我的委托
this.Invoke(new openDelegage(openFile))
不知大侠可有高招,帮我解决一下吧,不胜感激涕零再加分。
谢谢~
5 楼
jzyray [专家分:20610] 发布于 2008-05-05 17:59:00
Thread.Sleep的确是当前线程暂停,不会是UI线程
委托建议使用BeginInvoke,这样就不用等待该委托完成了
6 楼
bestiddv [专家分:0] 发布于 2008-05-08 12:59:00
谢谢这位大侠的解答。此问题已经解决,有两个方法:
1.使用异步委托delg.BeginInvoke("use ProcClass.ThreadProc()", null, null);
详情见 http://hi.baidu.com/kayuii/blog/item/a006bc51e310af8a8d5430ab.html
2.Control.CheckForIllegalCrossThreadCalls=false;
获取或设置一个值,该值指示是否捕获对错误线程的调用,这些调用在调试应用程序时访问控件的 Handle 属性。
我来回复