In meiner Anwendung habe ich eine Aufgabe, die auf einem Hintergrundthread ausgeführt wird. Ich benötige eine Benachrichtigung im Hintergrund-Thread, wenn eine MessageBox oder ein modales Dialogfeld im UI-Thread angezeigt wird.Wie kann man wissen, wann eine Message Box für ein Formular angezeigt wurde?
Obwohl ich es manuell tun kann, indem ich eine Funktion vor dem Anzeigen der MessageBox, aber es wird großartig sein, wenn ich nicht muss.
Für z.B .:
backgroundThread.MessageShown(); // I do not want to call this explicitly every time!
MessageBox.Show("Task halted!");
Ich vermute, es könnte mir eine Botschaft, die auf angeschlossen werden kann. Gibt es auch im Haupt-GUI-Thread eine Meldung/ein Ereignis, die kurz vor dem Anzeigen eines modalen Dialogfelds ausgelöst werden?
Okay, hier ist die Anforderung. Ich habe einige Aufgaben, die im UI-Thread ausgeführt werden, und ich muss den Fortschritt in einem separaten Dialogfeld anzeigen, das in einem Arbeitsthread angezeigt wird. Ich verstehe, dass dies die Aufgaben sein sollten, die im Worker-Thread erledigt werden müssen, aber das aktuelle Szenario kann vorläufig nicht geändert werden.
Alles funktioniert gut, bis auf einen Fehler: Wenn im UI-Thread ein Meldungsfeld angezeigt wird, wird es unter dem Fortschrittsdialogfeld ausgeblendet. So erfährt der Benutzer nie, dass die Benutzeroberfläche auf eine Eingabe wartet. Ich brauche einen Weg, um benachrichtigt zu werden, dass ein modales Dialogfeld angezeigt wurde und ich den Fortschrittsdialog ausblenden sollte.
Jetzt muss ich es direkt vor jedem Aufruf von MessageBox explizit ausblenden.
Ich hoffe, dass erklärt.
Dies ist möglicherweise nicht gut, aber * warum * muss Ihr Hintergrund-Thread über den Zustand der Benutzeroberfläche wissen? –
@Damien_The_Unbeliever: Weil der Hintergrund-Thread auch ein UI-Thread ist, der entsprechend dem Vordergrund-UI-Thread handeln muss! – nullDev