This topic created in 4679 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 Jl 24, 2013 1 非UI线程需要控制UI的时候,需要Invoke |