Gast
#3243103
Hat mir jemand eine fertigen code in C#, denn ich ich möchte einen button.performClick threadsicher aufrufen! Danke Markus
|
Anzeige
|
Thradsicherer button.performClick()
Gast
#3243103
Hat mir jemand eine fertigen code in C#, denn ich ich möchte einen button.performClick threadsicher aufrufen! Danke Markus
Gast
#3243111
Markus schrieb: > ich möchte einen button.performClick threadsicher aufrufen! und wo ist das Problem? http://msdn.microsoft.com/de-de/library/ms173179%28v=vs.80%29.aspx
Gast
#3243124
Ist das dann die Lösung wenn diese Fehlermeldung kommt? Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement menuStrip1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.
Gast
#3243127
Markus schrieb: > Ungültiger threadübergreifender Vorgang: Der Zugriff auf das > Steuerelement menuStrip1 erfolgte von einem anderen Thread als dem > Thread, für den es erstellt wurde. nein, das ist ein anderes Problem dieses "Problem" wurde schon ausreichend gelöst einfach mal bei googel "Ungültiger threadübergreifender Vorgang" suchen. Dann wirst du dinge wie invoke finden.
Gast
#3243168
ah ok kann ich etwas mehr Hilfe bekommen, für mein Problem mit diesem Fehler? Ungültiger threadübergreifender Vorgang: Der Zugriff auf das > Steuerelement menuStrip1 erfolgte von einem anderen Thread als dem > Thread, für den es erstellt wurde.
Gast
#3243314
Das hier führt zu dem Fehler! Wie kann ich den jetzt beseitigen? Grüße
Gast
#3243324
So geht es aber nicht! Kann mir jemand sagen, wieso es so nicht geht? Dein Lock verhindert ja nur, dass genau dieser Codeteil von einem anderen Thread ausgeführt wird. Andere asynchone Manipulationen am Objekt werden nicht verhindert. Die Änderung am Objekt muss vom Vordergrundthread geschehen. Und das erreicht man bequem mit Invoke.
Gast
#3243464
Eine Möglichkeit wäre z.B.:
[/code]
// this. ist hierbei die Form oder ein anderes Objekt, das Invoke()
unterstützt und im GUI-Thread erzeugt wurde.
this.Invoke((MethodInvoker)delegate
{
// (X) Hierhin, den Code der im GUI-Thread ausgeführt werden soll
});
[/code]
Stark vereinfacht - Durch den Invoke wird:
1) der Code, der im GUI-Thread läuft an geeigneter Stelle unterbrochen
2) dann im GUI-Thread (X) ausgeführt
3) und dann läuft der normale Code im GUI-Thread weiter und ebenso der
Thread, der Invoke aufgerufen hat.
Wenn du es Quick & Dirty magst, dann versuche mal das hier: Control.CheckForIllegalCrossThreadCalls = False Ist allerdings nicht ganz ungefährlich, weshalb ich den Weg über invoke bevorzugen würde. Aber mal für ein kleines schnelles Programm geht es... Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|