Die anonyme Methode kann nicht in 'System.Delegate' konvertiert werden, da es sich nicht um einen Delegattyp handelt

8

Ich möchte diesen Code auf dem Hauptthread in der WPF-App ausführen und Fehler bekommen Ich kann nicht herausfinden, was falsch ist:

%Vor%     
katit 10.04.2013, 20:34
quelle

2 Antworten

20

Anonyme Funktionen (Lambda-Ausdrücke und anonyme Methoden) müssen in einen spezifischen Delegattyp konvertiert werden, während Dispatcher.BeginInvoke nur Delegate benötigt. Dafür gibt es zwei Möglichkeiten ...

  1. Verwenden Sie weiterhin den vorhandenen BeginInvoke -Aufruf, geben Sie jedoch den Delegattyp an. Es gibt verschiedene Ansätze hier, aber ich extrahiere die anonyme Funktion im Allgemeinen zu einer früheren Aussage:

    %Vor%
  2. Schreiben Sie eine Erweiterungsmethode für Dispatcher , die Action anstelle von Delegate :

    benötigt %Vor%

    Dann können Sie die Erweiterungsmethode mit der impliziten Konvertierung aufrufen

    %Vor%

Ich würde Sie auch ermutigen, Lambda-Ausdrücke anstelle von anonymen Methoden zu verwenden:

%Vor%

BEARBEITEN: Wie in Kommentaren erwähnt, hat Dispatcher.BeginInvoke in .NET 4.5 eine Überladung erhalten, die direkt ein Action benötigt, so dass Sie in diesem Fall die Erweiterungsmethode nicht benötigen.

    
Jon Skeet 10.04.2013, 20:39
quelle
2

Sie können dafür auch MethodInvoker verwenden:

%Vor%     
Pinetwig 09.09.2015 15:03
quelle

Tags und Links