Feedback

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

Veröffentlicht von am 7/10/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.
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 7/14/2009:
Sehr praktisch.
Kennst du auch SynchronizationContext und/oder AsyncOperation?
Marcell Spies schrieb am 7/14/2009:
Also die Async-Operationen mit IAsyncResult kenne ich. Mit dem SynchronizationContext habe ich bisher noch nicht gearbeitet.
Günther Foidl schrieb am 7/14/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 7/15/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 7/15/2009:
Ah, super, vielen Dank für die vielen Infos.
Bei Gelegenheit werde ich mir das mal alles anschauen.
Rainer Hilmer schrieb am 9/3/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!