如何阻止一个方法,直到另一个方法在c#.net中执行

本文关键字:方法 另一个 执行 net 何阻止 一个 | 更新日期: 2023-09-27 18:25:58

我有一个应用程序,我在其中向硬件控制器发送一个命令,然后控制器对该命令做出响应。在这个例子中,我有一个命令队列,我一个接一个地发送它们,现在我想同步发送所有命令,这意味着当我收到第一个命令响应时,只有我会发送下一个命令。我有两种方法,一种用于发送命令,另一种用于处理接收到的命令。

如何阻止一个方法,直到另一个方法在c#.net中执行

这被称为信令,实现它的最简单方法是通过ManualResetEvent

如果在ManualResetEvent对象上调用WaitOne,则当前线程会被阻塞,直到另一个线程通过在同一对象上调用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.");