2013-03-27 6 views
11

Ich bin nicht vertraut mit der Verwendung von ManualResetEvent?In Bezug auf die Verwendung von ManualResetEvent Verwendung C#?

ist es Thread verwandt. was es tut und wann es verwendet wird?

hier habe ich einen Code, in dem Manual verwendet wird, aber ich verstehe einfach nicht, was sie tut?

hier ist der Code

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(); 
    } 

    // ... 
} 

, was die Bedeutung von _complete.WaitOne(); & _complete.Set(); ? ist

kann mir jemand gibt kleinen Beispielcode in die Manual Klasse Nutzungs da sein.

der Suche nach guten diskutieren und Nutzung von Manual? Dank

Antwort

16

Ich schlage vor, Sie den „Bemerkungen“ des MSDN page of ManualResetEvent zu lesen, die ziemlich klar über die Verwendung dieser Klasse ist.

Um Ihre spezifische Frage zu beantworten, wird die ManualResetEvent verwendet, um einen synchronen Aufruf an Download zu simulieren, auch wenn es asynchron ist. Es ruft die asynchrone Methode auf und blockiert, bis die ManualResetEvent signalisiert wird. Das ManualResetEvent wird innerhalb des Ereignishandlers des asynchronen ereignisbasierten Musters signalisiert. Im Grunde wird gewartet, bis das Ereignis ausgelöst und der Event-Handler ausgeführt wird.

2

ManualSetEvent ist Klasse, die Sie die Kommunikation zwischen verschiedenen Threads verwalten hilft, bei der einige Thread gestoppt werden muss und warten einen anderen Faden (Fäden) beenden dann diese Klasse sehr nützlich ist.

2

tiefes Verständnis für jedes Thema zu erreichen, ich habe die fast gleichen Informationen mit anderen Worten zu lesen. ich die MSDN-Dokumentation über die Manual gelesen haben, es war gut, dass ich es fast bekam zu verstehen, aber diese Verbindung hat mir geholfen, es zu verstehen, gut:

http://dotnetpattern.com/threading-manualresetevent


sehr einfache Erklärung

Wenn der aktuelle Thread die WiatOne() Methode aufruft, wartet er (also hör auf irgendetwas zu tun), bis ein anderer Thread die Set() Methode aufruft.

Es gibt eine weitere Überlast für die WaitOne, ist die WaitOne (TimeSpan). Dies ist fast das gleiche wie oben, aber wenn für eaxample 5 Sekunden Zeit diese Methode gibt, wird der aktuelle Thread für anderen Thread der Sets() Methode für 5 Sekunden und wenn nicht nennen warten, eine namens Set(), ruft es automatisch und contunie die Arbeit.