我正在寻找如何实现以下内容的概念: 我有4台设备通过RS232连接到PC,我想创建一些控制应用程序。我已经为处理通信和错误处理的4种不同设备创建了类。
在主线程中,我现在想要创建一些初始化序列。例如,一个控制参数是温度。所以我设定温度,然后需要等待10分钟,直到温度达到。到达时,我想设置电源的输出电压等。我需要并行控制参数(在等待温度进入可接受的窗口时,我还需要监控压力是否在一定范围内)。
所以我梦想着这样的事情,但不知道如何最好地实现它:
Device1.setTemp(200); magic.Wait(获取当前值的函数,包含最小/最大级别的对象,最大时间);
对于简单的情况。但我认为,一旦我知道要走向哪个方向,我可以扩展它以允许监控多个值。
请给我一些好的方向。我已经研究过线程,BackgroudWorkers等等。有许多不同的选择,但我不知道如何从一开始就以安全的方式创建它。
谢谢你, thefloe
答案 0 :(得分:1)
您可以使用EventWaitHandles来同步线程中的操作。阅读更多here。
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
}