C#停止并继续

Bet*_*moo 6 c#

我需要一些方法在C#中有效地执行以下操作:

使程序执行停止,直到更改某个值.

注意:我不想用while循环来避免浪费cpu电源.

编辑: 我希望它作出反应为尽快值改变后可能..

编辑:这将是我的类方法,由另一个代码调用,但是要检查的值是在我的类中...该方法应该等到其他代码评估并更改我的值..然后它必须继续做它的工作..不幸的是这已经做了很多次(所以我需要关心性能)

Phi*_*amb 7

如果您正在等待的值设置在同一应用程序中的其他位置,则可以使用等待句柄:

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)


Are*_*ren 6

while(some-condition-here)
{
    Thread.CurrentThread.Sleep(100); // Release CPU for 100ms
}
Run Code Online (Sandbox Code Playgroud)

我认为它被称为旋转睡眠.当然,你可以将100调整到你认为合适的任何东西.它基本上是每次检查的超时.

还有其他方法,但这是最简单的,而且非常有效.

它实际上在这本电子书中被引用:

Joseph Albahari在C#中的线程化:第2部分:基本同步