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(); ?
の意味は何ですか
manualResetEventクラスの使用法が記載されている小さなサンプルコードを誰かに教えてもらえますか?.
manualResetEventの適切な議論と使用法をお探しですか?ありがとう
ManualResetEvent
のMSDNページの「備考」セクションを読むことをお勧めします。これは、このクラスの使用法についてかなり明確です。
特定の質問に答えるために、ManualResetEvent
は、非同期であってもDownload
への同期呼び出しをシミュレートするために使用されます。 asyncメソッドを呼び出し、ManualResetEvent
が通知されるまでブロックします。 ManualResetEvent
は、非同期イベントベースパターンのイベントハンドラー内で通知されます。したがって、基本的には、イベントが発生してイベントハンドラーが実行されるまで待機します。
あらゆる主題を深く理解するためには、ほぼ同じ情報を読む必要があります。 ManualResetEventに関するMSDNドキュメントを読みましたが、ほとんど理解できて良かったのですが、このリンクはそれをよく理解するのに役立ちました。
http://dotnetpattern.com/threading-manualresetevent
非常に簡単な説明
現在のスレッドがを呼び出す場合 WiatOne() メソッドでは、他のスレッドがを呼び出すまで待機します(したがって、何もしないでください) セットする() 方法。
WaitOneには別の過負荷があります。 WaitOne(TimeSpan)。これは上記とほぼ同じですが、例として 5秒 このメソッドまでの時間、現在のスレッドは他のスレッドが呼び出すのを待っています セットする() のための方法 5秒 誰も呼ばなかったら セットする()、それは自動的にそれを呼び出し、作業を調整します。
ManualSetEventは、あるスレッドを停止し、別のスレッド(スレッド)が終了するのを待つ必要がある場合に、異なるスレッド間の通信を管理するのに役立つクラスです。そのクラスは非常に便利です。