Mit Invoke ein Delegate mit Parametern aufrufen?
-
Wenn ich ein Delegate erstelle, um einem Control einen String zu übergeben
den es anzeigen soll, bekomm ich einen Fehler, dass die Anzahl Parameter nicht stimmt.Ohne Parameter klappt es.
Eine nicht behandelte Ausnahme des Typs "System.Reflection.TargetParameterCountException" ist in System.Windows.Forms.dll aufgetreten.
Zusätzliche Informationen: Parameteranzahlkonflikt.
public: delegate void DisplayDelegate( String^ str ); public: void SetDisplay( String^ str ) { txtDisplay->Text = txtDisplay->Text + str; }
DisplayDelegate^ pDelegate = gcnew DisplayDelegate ( this, &Telnet::TelnetClient::SetDisplay ); txtDisplay->Invoke ( pDelegate );
Wie übergeb ich den String richtig und ist das überhaupt die richtige Vorgehensweise, um den Inhalt eines Controls Threadsicher zu ändern?
-
Bist Du hier weitergekommen ?
Kurzer Ausflug in die MSDN lies vermuten, das der Delegate für Invoke Parameterlos sein muss. Schau Dir mal Invoke in der MSDN an inkl. der Verweise auf den Delegate der dort genannt wird - eventuell hilft es was.
Wenn Du es bereits gelöst hast, lass uns die Lösung bitte wissen
-
ja habs hinbekommen
die invoke funktion mit einem parameter benutzt man nur bei void delegates
bei delegates mit parametern erstellt man ein array mit den parametern und übergibt das array beim invoke aufruf
array<Object^>^ pArg = {pDataString}; DisplayDelegate^ pDelegate = gcnew DisplayDelegate ( this, &Telnet::TelnetClient::SetDisplay ); txtDisplay->Invoke ( pDelegate, pArg );
-
Ah - besten Dank. Das neue Wissen wird sicherlich noch Hilfreich sein (sofern es die Suchfunktion dann findet
Vielen Dank!