【发布时间】:2017-07-19 02:56:37
【问题描述】:
假设我在 C# 中有一个事件侦听器,它等待来自串行端口的数据,一旦通过设置某些状态捕获这些数据就会返回。在主循环中,我会查看该状态并根据该状态决定下一步该做什么。
为此,我首先将命令写入串行端口并使用 Thread.Sleep 方法等待输出。当主线程仍处于睡眠模式时,事件侦听器已经发送数据并且没有任何操作来处理这种情况。
谁能告诉我在这种情况下会有什么结果以及如何预防?
代码是这样的
bool status = false;
//main thread
private void Main()
{
//some Code
serialPort.Write("something");
//Wait for 10 sec
Thread.Sleep(10000);
while(status == false)
{
// do something else
}
}
//Ignore the syntax, this is just to make people understand
public void OndataReceived(object sender, EventArg arg)
{
//Function that recieve the data
Receive();
//change status to true
status = true;
return;
}
【问题讨论】:
-
看看 Manual- 和 AutoResetEvent
-
创建您的自定义事件,从
OndataReceived方法内部触发它,并在我看来执行该方法的后续步骤
标签: c# multithreading serial-port