[英]Regarding the use of ManualResetEvent usage c#?
我不熟悉ManualResetEvent的用法?
它與線程有關嗎? 它做什么以及何時使用?
在這里我得到了一個使用ManualResetEvent的代碼,但我只是不明白它的作用?
這是代碼
public class Doc : SomeInterfaceFromTheDll
{
private readonly IVersion version; // An interface from the DLL.
private readonly ManualResetEvent _complete = new ManualResetEvent(false);
private bool downloadSuccessful;
// ...
public bool Download()
{
this.version.DownloadFile(this);
// Wait for the event to be signalled...
_complete.WaitOne();
return this.downloadSuccessful;
}
public void Completed(short reason)
{
Trace.WriteLine(string.Format("Notify.Completed({0})", reason));
this.downloadSuccessful = reason == 0;
// Signal that the download is complete
_complete.Set();
}
// ...
}
_complete.WaitOne(); & _complete.Set(); ?
的含義是什么_complete.WaitOne(); & _complete.Set(); ?
_complete.WaitOne(); & _complete.Set(); ?
任何人都可以給我一些小樣本代碼,其中包含ManualResetEvent類的用法。
尋找好的討論和使用ManualResetEvent? 謝謝
我建議你閱讀ManualResetEvent
的MSDN頁面的“備注”部分,它非常清楚這個類的用法。
為了回答您的具體問題, ManualResetEvent
用於模擬對Download
的同步調用,即使它是異步的。 它調用異步方法並阻塞,直到發出ManualResetEvent
信號。 ManualResetEvent
在基於異步事件的模式的事件處理程序中發出信號。 所以基本上它會等到事件被觸發並執行事件處理程序。
為了深入理解任何主題,我必須閱讀幾乎相同的信息。 我已經閱讀了有關ManualResetEvent的MSDN文檔,我很了解它很好,但這個鏈接幫助我理解它:
http://dotnetpattern.com/threading-manualresetevent
非常簡單的解釋
如果當前線程調用WiatOne()方法,它將等待(所以停止做任何事情),直到任何其他線程調用Set()方法。
WaitOne還有另一個重載,就是WaitOne(TimeSpan) 。 這與上面的幾乎相同,但是如果對於eaxample給這個方法5秒的時間,當前線程將等待其他線程調用Set()方法5秒 ,如果沒有人調用Set() ,它自動調用它並使工作恢復正常。
ManualSetEvent是一個類,它可以幫助您管理不同線程之間的通信,當一些線程必須停止並等待完成另一個線程(線程)然后該類非常有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.