如果您正在等待的值设置在同一应用程序中的其他位置,则可以使用等待句柄:
AutoResetEvent waitHandle = new AutoResetEvent();
...
//thread will sleep here until waitHandle.Set is called
waitHandle.WaitOne();
...
//this is where the value is set
someVar = someValue;
waitHandle.Set();
Run Code Online (Sandbox Code Playgroud)
(请注意,WaitOne和Set必须在不同的线程上发生,因为WaitOne将阻止调用它的线程)
如果您无法访问更改值的代码,那么最好的方法是,正如其他人所说,使用循环来检查值是否已更改并使用Thread.Sleep()所以您不是使用尽可能多的处理器时间
while(!valueIsSet)
{
Thread.Sleep(100);
}
Run Code Online (Sandbox Code Playgroud)
while(some-condition-here)
{
Thread.CurrentThread.Sleep(100); // Release CPU for 100ms
}
Run Code Online (Sandbox Code Playgroud)
我认为它被称为旋转睡眠.当然,你可以将100调整到你认为合适的任何东西.它基本上是每次检查的超时.
还有其他方法,但这是最简单的,而且非常有效.
它实际上在这本电子书中被引用:
Joseph Albahari在C#中的线程化:第2部分:基本同步