111,097
社区成员




port.DataReceived += comm_DataReceived;
void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
{Thread t = new Thread(() =>
{
... 读取串口数据
});
t.Start();
this.Invoke(new WriteInvoke(Write),
new object[] { "读取到的内容" });
我用这样来传给UI[/quote]
你用Invoke当然可能会卡,它是同步的。[/quote]
那应该用什么?[/quote]
BeginInvoke。但是串口多于50个以上,就程序卡死掉.就那种假死状态 [quote=引用 8 楼 mjjackey 的回复:] [quote=引用 7 楼 meiyoudao 的回复:] [quote=引用 5 楼 mjjackey 的回复:] comm_DataReceived本身已经开了一个线程来处理了。每一个串口都有一个comm_DataReceived事件。在comm_DataReceived里添加数据处理代码,但是如果是高频大数据的话,单独开一个线程来处理数据。comm_DataReceived里只接受数据。
this.Invoke(new WriteInvoke(Write),
new object[] { "读取到的内容" });
我用这样来传给UI[/quote]
你用Invoke当然可能会卡,它是同步的。[/quote]
那应该用什么?但是串口多于50个以上,就程序卡死掉.就那种假死状态 [quote=引用 7 楼 meiyoudao 的回复:] [quote=引用 5 楼 mjjackey 的回复:] comm_DataReceived本身已经开了一个线程来处理了。每一个串口都有一个comm_DataReceived事件。在comm_DataReceived里添加数据处理代码,但是如果是高频大数据的话,单独开一个线程来处理数据。comm_DataReceived里只接受数据。
this.Invoke(new WriteInvoke(Write),
new object[] { "读取到的内容" });
我用这样来传给UI[/quote]
你用Invoke当然可能会卡,它是同步的。但是串口多于50个以上,就程序卡死掉.就那种假死状态 [quote=引用 5 楼 mjjackey 的回复:] comm_DataReceived本身已经开了一个线程来处理了。每一个串口都有一个comm_DataReceived事件。在comm_DataReceived里添加数据处理代码,但是如果是高频大数据的话,单独开一个线程来处理数据。comm_DataReceived里只接受数据。
this.Invoke(new WriteInvoke(Write),
new object[] { "读取到的内容" });
我用这样来传给UI但是串口多于50个以上,就程序卡死掉.就那种假死状态 comm_DataReceived本身已经开了一个线程来处理了。每一个串口都有一个comm_DataReceived事件。在comm_DataReceived里添加数据处理代码,但是如果是高频大数据的话,单独开一个线程来处理数据。comm_DataReceived里只接受数据。
comm_DataReceived本身已经开了一个线程来处理了。每一个串口都有一个comm_DataReceived事件。在comm_DataReceived里添加数据处理代码,但是如果是高频大数据的话,单独开一个线程来处理数据。comm_DataReceived里只接受数据。
SerialPort 帮你把所有的事情都做完了 每个SerialPort对应一个串口 监听DataReceived事件 在事件处理程序中处理数据 不需要你再搞多线程
void comm_DataReceived(object sender, SerialDataReceivedEventArgs e) 不要再这里面启动线程