簡體   English   中英

關於使用ManualResetEvent的用法c#?

[英]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? 謝謝

我建議你閱讀ManualResetEventMSDN頁面的“備注”部分,它非常清楚這個類的用法。

為了回答您的具體問題, 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.

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