Frage zu InvokeRequired
-
Hallo,
ich habe neben dem Hauptthread noch einen weiteren Thread erstellt, indem Funktionen aufgerufen werden, die auf die GUI zugreifen. Nun kann man ja in der Funktion die auf die GUI zugreift mit InvokeRequired erreichen, dass für den GUI-Zugriff zum Hauptthread gewechselt wird.
Nun ist mir aufgefallen, dass wenn die Exe des Programms gestartet wird, trotzdem aus dem Hintergrundthread heraus über eine Funktion auf die GUI zugegriffen werden kann, selbst wenn in der besagten Funktion kein InvokeRequired implementiert ist.
Wenn man nun das Programm im Debugging-Modus startet, erhält man bei gleichem Code an entsprechender Stelle einen Fehler,dass der Thread eben nicht auf die GUI-Komponente zugreifen darf.Warum taucht der Fehler nicht auch bei der Ausführung der Exe auf, denn der Hintergrundthread dürfte ja eigentlich nicht auf GUI-Elemente des Hauptthreads zugreifen dürfen?
Viele Grüße und besten Dank
Cain
-
InvokeRequired gibt nur an ob es nötig ist, den Aufruf zu marshallen. Dies geschieht dann mit der Invoke(..) Methode der Form bzw. des Controls.
Simon
-
Hi Simon, das ist mir klar und funktioniert auch soweit
Meine Frage ist halt warum beim Starten der Exe kein entsprechender Fehler angezeigt wird, wenn aus einem zweiten Thread heraus auf die GUI des Hauptthreads zugegriffen wird, denn beim Starten im Debugging-Modus kommt ja auch der Fehler,so wie es sein sollte...
-
Ich denke, weil der Debugger das überwacht.
-
Ja das kann sein, mich wundert nur, dass der Zugriff aber einwandfrei funktioniert obwohl das doch eigentlich nicht sein dürfte?
Wenn keine Fehlermeldung kommt und dann aber auch der Zugriff nicht klappt könnte man schnell sagen, okay es liegt am Debugger, aber wenn der Zugriff auf die GUI klappt dann frag ich mich wofür überhaupt das Invoke verwenden wenn es auch ohne klappt...
-
Das ist wie mit dem undefined behaviour in C++... halte dich dran, was anderes ist einfach nicht erlaubt auch wenns so aussieht als würde es trotzdem funktionieren.
Simon