2009-07-02 10 views
0

Wie der Mainthread in C# AnwendungWie Sie den MainThread in C# -Anwendung sperren?

So etwas wie

lock (Thread.CurrentThread) // This will give the current running thread 
{ 
// Bolck of Sync Codes 
} 

ich einige Worker-Threads auch tun haben zu sperren .. Aber ich brauche den Mainthread zu sperren und

einig Codes auszuführen ..

Kann mir jemand dabei helfen ..

+2

Bitte erläutern Sie, was Sie erreichen möchten. –

+3

Können Sie erklären, was Sie erreichen möchten? Threads sind normalerweise nicht gesperrt, sondern Objekte –

Antwort

2

Warum müssen Sie das CurrentThread-Objekt sperren? Für verschiedene Threads ist dieser Wert unterschiedlich und mehrere Threads können trotzdem in diesen Block eintreten.

Wenn Sie vermeiden möchten, dass mehrere Threads in den oben gezeigten Block gelangen, sollten alle Threads versuchen, eine Sperre für ein vereinbartes gemeinsames Objekt zu erhalten. definieren ein Mitglied wie

private member object m_objectForLock; 

und eine Sperre erhalten wie diese

lock(m_objectForLock) 
{ 
    // Block of sync codes 
} 
0

Ich bin nicht sicher, ob ich Ihre Frage richtig verstanden habe, aber ..

Blocking geschieht automatisch in Ihrem thread, wenn Sie eine Methode nicht explizit asynchron aufrufen. Blockieren ist in diesem Zusammenhang kein Merkmal, sondern eine Konsequenz.

Die Verwendung von lock in Ihrem Beispiel dient dem expliziten Zugriff auf eine Variable in einem asynchronen Kontext.

1

Die Frage ist unklar und bedarf der Zusammenarbeit.

Um jedoch Objekte unter mehreren separaten Threads zu teilen, muss eine Art Lock/Sync-Mechanismus angewendet werden.

Eine Möglichkeit, dies zu erreichen, ist eine LockObject auf folgende Weise zu verwenden:

private object _objectLock; 

    private void DoWork() 
    { 
     lock (_objectLock) 
     { 
      //Code to execute 
     } 
    } 

Auf der anderen Seite, wenn Sie die Ausführung eines Threads mögen „halten“, könnte man in Betracht ziehen System.Threading.EventWaitHandle

Verwandte Themen