C#使用线程等待多个条件

C#使用线程等待多个条件,c#,multithreading,thread-safety,C#,Multithreading,Thread Safety,我正在寻找如何实现以下目标的概念: 我有4个设备通过RS232连接到一台PC,我想在那里创建一些控制应用程序。我已经为处理通信和错误处理的4个不同设备创建了类 在主线程中,我现在想要创建一些初始化序列。例如,一个控制参数是温度。所以我设置了温度,然后需要等待10分钟,直到温度达到。当达到这个值时,我想设置电源的输出电压等等。我需要并行控制一些参数(在等待温度进入可接受的窗口时,我还需要监控压力是否在某个范围内) 因此,我梦想着这样的事情,但不知道如何最好地实现它: 装置1.setTemp(200

我正在寻找如何实现以下目标的概念: 我有4个设备通过RS232连接到一台PC,我想在那里创建一些控制应用程序。我已经为处理通信和错误处理的4个不同设备创建了类

在主线程中,我现在想要创建一些初始化序列。例如,一个控制参数是温度。所以我设置了温度,然后需要等待10分钟,直到温度达到。当达到这个值时,我想设置电源的输出电压等等。我需要并行控制一些参数(在等待温度进入可接受的窗口时,我还需要监控压力是否在某个范围内)

因此,我梦想着这样的事情,但不知道如何最好地实现它:

装置1.setTemp(200); magic.Wait(获取当前值的函数,包含最小/最大级别的对象,最大时间)

对于简单的情况。但我想,一旦我知道了该往哪个方向走,我就可以扩展它,允许监控多个值

请给我一些好的方向。我已经调查了线程、背景工作人员等。有许多不同的选项可用,但我不知道如何从一开始就以安全的方式创建它

谢谢,,
可以使用EventWaitHandles在线程内同步操作。阅读更多


非常感谢你。我确信有一个简单的方法可以做到这一点。这正是我要找的;)
static EventWaitHandle _go = new AutoResetEvent(false);

static void Main(string[] args)
{
    //Set the temperature 
    int Temp = 100;
    int Voltage = 240;

    Thread t1 = new Thread(() => SetTemperature(Temp) );
    Thread t2 = new Thread(() => SetPowerVoltage(Votage));
    Thread t3 = new Thread(() => SomeOtherImportantWork()); //Which can go on in parallel
    t1.Start();
    t2.Start();
    t3.Start();
    ....
    ....

    //you can wait or do other operations
}

//Logic to set the temperature
static void SetTemperature(int temperature)
{
    Console.WriteLine("Setting temperature");

    //Do your stuff     

    //Signal your other thread
    _go.Set();

}


static void SetPowerVoltage(int voltage)        
{
    //Wait for the temperature to be set
    Console.WriteLine ("Waiting...");
    _go.WaitOne();


    //This will begin execution once the temp thread signals
    //Do your stuff to set voltage

}

static void SomeOtherImportantWork()         
{
     //Do Important work
}