Beste Methode, um Cross-Threaded Code aufzurufen?

Ich weiß, dass diese Frage gestellt wurde, bevor, aber ich bin auf der Suche nach einem Weg:

  1. optimierten Erstellung von sicheren cross-Thread-code.
  2. Wiederverwendung dieser code in jeder situation (keine Windows Forms-Referenzen).

Hier ist, was ich habe, so weit, aber ich wollen, entfernen Sie die Windows Forms-Referenzen. Irgendwelche Ideen?

public delegate void SafeInvokeDelegate(System.Action action);
public class SafeInvoke
{
    private readonly System.Windows.Forms.Control _threadControl;

    public SafeInvoke()
    {
        _threadControl = new System.Windows.Forms.Control();
    }

    public void Invoke(System.Action action)
    {
        if (_threadControl.InvokeRequired)
            _threadControl.Invoke(new SafeInvokeDelegate(Invoke), new object[] {action});
        else if (action != null) action();
    }
}

Die obige Klasse könnte so genutzt werden:

SafeInvoke _safeInvoker = new SafeInvoke();
void SafeClearItems()
{
    _safeInvoker.Invoke(delegate
        {
            listView1.Items.Clear();
        });
}

Wie würde ich entfernen, das System.Windows.Formen.Kontrolle in der SafeInvoke Klasse, aber halten die gleiche Funktionalität?

Kommentar zu dem Problem
Beachten Sie, dass die docs umliegenden Invoke() auf der Steuerung sind eigentlich ziemlich subtil. Ich glaube nicht, dass eine generische Klasse ist ausreichend für die Steuerung durch die Interaktion mit IsHandleCreated und IsDisposed (es sei denn, Sie überprüfen Sie immer die ersten in Ihre SafeInvokeDelegate). ( stackoverflow.com/questions/714666 ) Kommentarautor: Greg D
Vielen Dank für das teilen dieser Klasse. Hat mir geholfen, meine Probleme zu lösen.. Kommentarautor: Farrukh Waheed

InformationsquelleAutor der Frage CLaRGe | 2009-04-02

Schreibe einen Kommentar