Ich versuche, eine Windows-Anwendung, die in der Taskleiste als NotifyIcon
starten und dann einige Formulare basierend auf Ereignissen und Benutzereingaben zeigt. ich Visual Studio 2013So zeigen Sie ein Formular aus einem anderen Thread als der ApplicationContext-Thread
Also, was ich tat, bin mit ist das Standardformular löschen VS erstellt und löschen Sie die Application.run()
von Program.cs
und tat Application.run(new MyApplicationContext())
wo MyApplicationContext
eine Klasse, die ApplicationContext
erstreckt, wo ich initialisieren und zeigen die NotifyIcon
Dann habe ich einen woker-Thread erstellt, der eine Datenbank nach Informationen abfragt und versucht, diese Informationen in einer anzuzeigen, die ich erstellt habe.
Wenn ich etwas tun, wie dies in dem woker Thread-Code:
NotificationForm form = new form();
form.Top = // change the location;
form.show();
Die Meldung zeigt in der Standardposition, und jedes UI-Element auf es erscheint transparent und ich kann
auf Desktop-see-throughAber wenn ich im Worker-Thread Application.run(form)
aufrufen funktioniert das Formular richtig und zeigt in der richtigen Position, aber es blockiert meinen Worker-Thread.
Wenn ich eine Form
hätte, würde ich Invoke
auf dieser Form
anrufen. Aber was soll ich in meinem Fall tun?
EDIT: Als Abhilfe eingeleitet ich eine Form
genannt parentForm
in der MyApplicationContext
dann Show rief sie dann unsichtbar gemacht. Und dann rufe ich davon an. Aber es scheint eine schmutzige Arbeit zu sein und nicht die richtige;
Jeder Kommentar, warum ich die Down-Abstimmung verdiene, so dass ich zumindest verbessern könnte? – vlatkozelka
Haben Sie versucht, einfach einen neuen Thread zu starten und "Application.Run (form)" auf diesem Thread auszuführen? –