System-tray-icon mit c# Konsole-Anwendung wird nicht angezeigt, im Menü
Ich habe eine kleine C# (.NET 4.0) - Konsole-Anwendung, die ich möchte dem Benutzer interagieren können, indem Sie zeigen ein Menü an, wenn Sie rechts-klicken Sie auf das Symbol in der Taskleiste. Ich kann nur hinzufügen, ein icon in der Taskleiste ohne Probleme, aber ich kann einfach nicht bekommen, wird das Menü angezeigt. Ich bin mit dem folgenden code:
NotifyIcon trayIcon = new NotifyIcon();
trayIcon.Text = "TestApp";
trayIcon.Icon = new Icon(SystemIcons.Application, 40, 40);
ContextMenu trayMenu = new ContextMenu();
trayMenu.MenuItems.Add("Blah", item1_Click);
trayMenu.MenuItems.Add("Blah2", item1_Click);
trayMenu.MenuItems.Add("Blah3", item1_Click);
trayIcon.ContextMenu = trayMenu;
trayIcon.Visible = true;
... was bringt das Symbol in der Taskleiste. Jedoch, Recht-klicken auf das Symbol tut sich nichts. Ich habe versucht, verschiedene Variationen von MenuItems.Add
, aber nichts machen wird das Menü angezeigt. Ich bin sicher, ich bin etwas fehlt einfach - irgendwelche Ideen, was?
InformationsquelleAutor KenD | 2012-10-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie, diese nach dem erstellen des symbols:
Beachten Sie, dass diese Methode keinen Wert zurück, so dass Sie können nicht alles tun, nach dem Aufruf. Dies bedeutet, dass Sie ll haben zu tun, alle anderen arbeiten in einem separaten thread.
Was passiert, ist, dass das Betriebssystem sendet die Anwendung eine Meldung, dass es das tray-icon mit der rechten Maustaste geklickt, aber das tray-icon code nie sieht (weil diese Nachrichten verarbeitet werden, die von
Application.Run
) und kann so nicht reagieren, indem Sie das öffnen des Menüs.InformationsquelleAutor Roman Starkov
Ich dachte, ich würde teilen hier... was für ein Segen es war, jemanden zu hören, endlich erwähnen, Anwendung.Run(). Ich habe viel zu lange versucht, dies herauszufinden. Aber ich dachte, ich würde teilen, die eine alternative zu legen, alle anderen code in einem anderen thread wäre das NotifyIcon, Menü, Veranstaltungen, etc. auf einem anderen thread als dem Hauptthread. Dies sollte auch Anwendung.Run() dies erlaubt die standard-Anwendung (message-loop) die Arbeit an der aktuellen thread. Dann seit den Ereignissen waren auf dem gleichen thread erstellt, der Anwendung.Exit() kann verwendet werden, um zu schließen aus der notification-messaging -, aber immer noch erlauben, den Haupt-thread weiter. Hier ist ein kleines Beispiel für eine console app... hoffentlich kann jemand helfen Fragen, wie Sie im Begriff waren, zu ziehen diese aus:
Es ist möglich, die Minimierung der Veranstaltung, so kann die Konsole geht in den system-tray?
MediaTypeNames.Application.Run()
ist nicht definiert, warum?InformationsquelleAutor bjhuffine
Hier ist die Lösung:
Verwenden Sie
Application.Run()
weil Ereignisse, die von gui im Konsolen-Modus funktioniert nicht.Aber Sie können diese Lösung verwenden:
Wird diese starten Ihre setup-try-icon im neuen thread ...
InformationsquelleAutor user3071881
Haben, fügen Sie die event-handler für tray-Symbol Maus klicken?
erstellen von Kontext-Menü und Folgendes machen innerhalb der trayIcon_MouseDown Funktion
Versuchen. Denke, das wird dir helfen.
InformationsquelleAutor New Developer