【发布时间】:2013-07-26 01:10:36
【问题描述】:
假设我想从串口接收一些数据。对 serial.ReadLine() 使用块调用并使用以下事件。
private void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
var port = (SerialPort)sender;
string line = port.ReadLine();
// PROCESS DATA Somewhere else
}
我从不同的来源阅读,他们都说 serial.ReadLine 有自己的线程,我不应该从这个线程修改 UI,除非使用 BeginInvoke。但是,我注意到在一段时间内 UI 无论如何都会变得无响应。
所以这是我的问题。在 port_DataReceived 中调用一个新线程会是个坏主意吗? 我想接收数据并在另一个线程中处理接收到的数据但是 mythread.Start() 把它放在哪里?我不能一直启动它,我只是想让它知道接收数据后何时独立运行。并且根据 MSDN,中止的线程无法再次启动。放置 Thread.Sleep 会冻结我的 UI。
【问题讨论】:
标签: c# multithreading visual-studio-2010 threadpool