Feedback

C# - Threadsicherer Codeaufruf im Control-Kontext (Invoking)

Veröffentlicht von am 10.07.2009
(4 Bewertungen)
Diese Extension-Methode ermöglicht das Ausführen von Anweisungen im Kontext eines Controls mit Hilfe von InvokeRequired.

Hierdurch können Eigenschaften threadsicher zugewiesen, bzw. Methoden ausgeführt werden.
Snippet in VB übersetzen
public static void ExecuteThreadSafe(this Control control, Action action)
{
    if (control.InvokeRequired)
    {
        control.Invoke(action);
    }
    else
    {
        action.Invoke();
    }
}


//Beispiel:
comboBox.ExecuteThreadSafe(() => comboBox.Enabled = true);

comboBox.ExecuteThreadSafe(() =>
{
    comboBox.Enabled = true;
    comboBox.Items.Add("Threadsicheres");
    comboBox.Items.Add("hinzufügen");
    comboBox.Items.Add("von");
    comboBox.Items.Add("Items");
});

6 Kommentare zum Snippet

Günther Foidl schrieb am 14.07.2009:
Sehr praktisch.
Kennst du auch SynchronizationContext und/oder AsyncOperation?
Marcell Spies schrieb am 14.07.2009:
Also die Async-Operationen mit IAsyncResult kenne ich. Mit dem SynchronizationContext habe ich bisher noch nicht gearbeitet.
Günther Foidl schrieb am 14.07.2009:
[quote]Async-Operationen mit IAsyncResult[/quote] Nein, ich meine die AsyncOperation aus System.ComponentModel. Siehe hierzu: http://www.codeproject.com/KB/cpp/SyncContextTutorial.aspx
Rainer Hilmer schrieb am 15.07.2009:
Einen dreiteiligen Artikel zum SynchronizationContext gibt es hier:
http://www.codeproject.com/KB/threads/SynchronizationContext.aspx
http://www.codeproject.com/KB/threads/SynchronizationContext2.aspx
http://www.codeproject.com/KB/threads/SynchronizationContext3.aspx
Er behandelt das Thema ausführlich und beinhaltet praktische Beispiele.
Marcell Spies schrieb am 15.07.2009:
Ah, super, vielen Dank für die vielen Infos.
Bei Gelegenheit werde ich mir das mal alles anschauen.
Rainer Hilmer schrieb am 03.09.2009:
Aus aktullem Anlass habe ich mir erlaubt, eine kleine Beispielanwendung für Anfänger zu basteln.
http://dotnet-forum.de/forums/p/1772/6435.aspx#6435
 

Logge dich ein, um hier zu kommentieren!