C#停止并继续

时间:2010-05-21 19:28:22

标签: c#

我需要一些方法在C#中执行以下高效

使程序执行停止,直到某个值发生变化。

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

修改 而且我希望它在值发生变化后尽可能快地响应

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

5 个答案:

答案 0 :(得分:15)

答案 1 :(得分: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();

(请注意,WaitOne和Set必须在不同的线程上发生,因为WaitOne将阻止调用它的线程)

如果您无法访问更改值的代码,那么最好的方法是,正如其他人所说的那样,使用循环来检查值是否已更改并使用Thread.Sleep()以便您'没有使用那么多的处理器时间:

while(!valueIsSet)
{
    Thread.Sleep(100);
}

答案 2 :(得分:6)

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

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

还有其他方法可以做到这一点,但这是最简单的,也非常有效。

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

Threading in C# by Joseph Albahari: Part 2: Basic Synchronization

答案 3 :(得分:3)

您可以使用Observer设计模式。它旨在解决像你这样的问题。

该模式主要包含主题和观察者。您可以让它快速响应任何变化。

您可以找到更多信息和示例代码here

答案 4 :(得分:2)