我有一个应用程序,我在其中向硬件控制器发送命令,然后控制器响应该命令。在这里,我有一个命令队列,我逐个发送它们,现在我想同步发送所有命令,意味着当我收到第一个命令响应然后我只发送下一个命令。 我有两种方法,一种用于发送命令,另一种用于处理接收到的命令。
答案 0 :(得分:6)
这称为信令,实现它的最简单方法是通过ManualResetEvent
。
如果你在WaitOne
对象上调用ManualResetEvent
,当前线程会被阻塞,直到另一个线程"发出信号"它通过在同一个对象上调用Set
来继续:
var signal = new ManualResetEvent(false); // instantiate in "unsignaled" state
new Thread (() =>
{
Console.WriteLine("Sending command to hardware controller...");
// send your command
// ...
Console.WriteLine("Done.");
signal.Set(); // signal the waiting thread that it can continue.
}).Start();
Console.WriteLine("Waiting for hardware thread to do it's work...");
signal.WaitOne(); // block thread until we are signaled.
signal.Dispose();
Console.WriteLine("Got our signal! we can continue.");