This topic created in 4688 days ago, the information mentioned may be changed or developed.
现在我想做一个界面,有1个textbox,和两个button ,一个button是开始,点击后,开始接受数据[从串口],并显示在textbox里,另一个button 是停止,即停止上述的操作。
现在的问题是:
单纯的在开始的那个函数中用无限循环来接受数据的话,会导致整个界面都卡死,就无法点击停止的button,也就无法终止。
尝试过用backgroundWorker,但是由于其不支持在DoWork 事件处理中操作任何用户界面对象,即无法再接受的同时在textbox中显示,而他提供的ReportProgress对我而言也没什么用。
请问V上的各位,应该如何解决。。。
9 replies • 1970-01-01 08:00:00 +08:00
 |
|
1
66450146 Jul 24, 2013 1
Control.Invoke
|
 |
|
2
cxe2v Jul 24, 2013 1
创建一个子线程用来接收数据,每接收一次返回一个值用来指示主线程刷新textbox,
|
 |
|
3
timonwong Jul 24, 2013 1
方法多了 1. 调用GUI部分使用MethodInvoker把委托给GUI线程调用,这个耦合比较重,不过对知识点没啥要求。(当然处理部分可以BackgroundWorker, Thread, TPL等等)。 2. Reactive Extensions,这个写习惯了就相当方便,要求你换换脑子。
|
 |
|
4
msg7086 Jul 24, 2013 1
Thread.Start this.Invoke
|
 |
|
5
nybux Jul 24, 2013 1
c#做串口,不知道你用的是不是SerialPort,有个DataReceived的事件,不用线程的
|
 |
|
7
timothyye Jul 24, 2013 via Android 1
放线程里面处理,或者用backgroundworker组件。主ui线程里面这样会让刷新出问题
|
 |
|
8
wzxjohn Jul 24, 2013 1
當然是開子線程了。。。接受數據的部分用線程處理,終止的時候直接關掉子線程。
|
 |
|
9
Ricepig Jul 24, 2013 1
非UI线程需要控制UI的时候,需要Invoke
|