簡體   English   中英

C#停止並繼續

[英]C# stop and continue

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

使程序執行停止,直到更改某個值。

注意:我不想用while循環來避免浪費cpu電源。

編輯:我想它的值更改后盡可能快速響應..

編輯:這將在我的類方法中,由另一個代碼調用,但是要檢查的值是在我的類中...該方法應該等到其他代碼評估並更改我的值..然后它必須繼續做它的工作..不幸的是這已經做了很多次(所以我需要關心性能)

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

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);
}
while(some-condition-here)
{
    Thread.CurrentThread.Sleep(100); // Release CPU for 100ms
}

我認為它被稱為旋轉睡眠。 當然,你可以將100調整到你認為合適的任何東西。 它基本上是每次檢查的超時。

還有其他方法,但這是最簡單的,而且非常有效。

它實際上在這本電子書中被引用:

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

您可以使用Observer設計模式。 它旨在解決像你這樣的問題。

該模式主要包含主體和觀察者。 您可以讓它快速響應任何變化。

您可以在此處找到更多信息和示例代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM