回 帖 发 新 帖 刷新版面

主题:请教大侠:在频繁的串口操作中,程序界面会假死

在频繁的串口操作中,程序界面会出现假死状况。如何才能够使程序在处理串口通信时,
界面仍然可以操作呢?
    谢谢!

回复列表 (共6个回复)

沙发

再开一个线程。
用于处理串口。

板凳


谢谢了先。
不好意思啊,我问过一个软件开发员,他说这样的话界面还是会假死
冒昧的问您您确定吗?
谢谢~~

3 楼

我觉得一楼说的可以。前几天做了个东西,往TreeView中填充大量数据时,导致画面假死。
最后了两个线程交互。
线程1,处理需要填充的数据。(不要在这里过多处理画面上的东西)
线程2,等待线程1处理完,在填充。
经过这样处理以后,后台填充数据时,程序界面,保持原来状态,可以随意操作。

我觉得我遇到的问题和你类似,可以参考一下

4 楼


首先谢谢这位大侠,最近比较忙,给分晚了,不好意思,请原谅。
由于我的程序中有很多处的Thread.sleep(),而又要和UI界面交互,
所以我用委托,而我发现委托中Thread.sleep()是在主线程中执行的,所以界面还是会假死。下面是我的委托
this.Invoke(new openDelegage(openFile))
不知大侠可有高招,帮我解决一下吧,不胜感激涕零再加分。
谢谢~

5 楼

Thread.Sleep的确是当前线程暂停,不会是UI线程
委托建议使用BeginInvoke,这样就不用等待该委托完成了

6 楼


谢谢这位大侠的解答。此问题已经解决,有两个方法:

1.使用异步委托delg.BeginInvoke("use ProcClass.ThreadProc()", null, null);
详情见  http://hi.baidu.com/kayuii/blog/item/a006bc51e310af8a8d5430ab.html

2.Control.CheckForIllegalCrossThreadCalls=false;
获取或设置一个值,该值指示是否捕获对错误线程的调用,这些调用在调试应用程序时访问控件的 Handle 属性。


我来回复

您尚未登录,请登录后再回复。点此登录或注册