Mein Tray-Icon nicht mehr reagiert, wenn meine Anwendung minimiert wird!
-
20-09-2019 - |
Frage
Nach der Feststellung dieser Frage und folgen sie den Anweisungen gibt, und nach vielen der Links, ich es geschafft, meine App zu bekommen als ein System Tray-icon angezeigt werden soll, und es verschwindet aus der Taskleiste, wenn ich es minimieren.
ABER - seltsames Verhalten! Wenn die Form offen ist, arbeitet das System Tray-Icon in Ordnung. Aber sobald ich es minimieren, der Tray-Icon nicht mehr auf jede Art von Mausklick reagiert.
Weitere Fakten, die ins Spiel kommen können: Die Form wird gestartet, indem ein roter Faden wird aus dem Hauptfaden ausgegliedert, und es ist mit .ShowDialog()
geöffnet. Es gibt auch mehrere andere Threads im Hintergrund ausgeführt wird.
Alle Ideen, was falsch läuft?
Lösung
Ersetzen f.ShowDialog();
mit Application.Run(f);
wo f
ist die Variable Ihre Form
halten und es sollte funktionieren. Das Problem ist, dass ShowDialog
gibt (und es die Nachricht von Schlaufenenden), wenn Sie das Formular auszublenden. Application.Run
stellt eine ordnungsgemäße Nachrichtenschleife und das Fenster arbeitet, nachdem sie versteckt worden und kann zeigen, wieder auf das System-Tray-Symbol.
Andere Tipps
Nicht ganz sicher, was Ihr Code wie folgt aussieht, aber unten ist einige Code, den ich von einem unserer Apps gezogen. Seine in VB geschrieben, aber sollte nicht zu schwer für Sie zu konvertieren. Der Schlüssel ist eine Application Klasse zu erstellen, um Ihren Code zu hosten. Dieser Code hat keine Probleme eine Form zeigt, und schließen Sie es dann wiederholt oder mit minimiert oder maximiert wird.
Public Class NotifyApplicationContext
Inherits ApplicationContext
Private components As System.ComponentModel.IContainer
Private Notify As System.Windows.Forms.NotifyIcon
Private Menu As System.Windows.Forms.ContextMenu
Private mnuForm As System.Windows.Forms.MenuItem
Private F As Form
Public Sub New()
InitializeContext()
End Sub
Private Sub InitializeContext()
Me.components = New System.ComponentModel.Container
Me.Notify = New System.Windows.Forms.NotifyIcon(Me.components)
SetupContextMenu()
Notify.ContextMenu = Me.Menu
Notify.Icon = New Icon("YourApplicationIcon", 16, 16)
Notify.Text = "Your Application Text"
Notify.Visible = True
F = New Form
F.Show()
End Sub
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
MyBase.Dispose(disposing)
End Sub
Protected Overrides Sub ExitThreadCore()
MyBase.ExitThreadCore()
End Sub
Private Sub SetupContextMenu()
Me.Menu = New System.Windows.Forms.ContextMenu
Me.mnuForm = New System.Windows.Forms.MenuItem
Me.Menu.MenuItems.Add(mnuForm)
mnuForm.Index = 7
mnuForm.Text = "FormText"
AddHandler mnuForm.Click, AddressOf Me.mnuTemp_Click
End Sub
Private Sub mnuForm_Click(ByVal sender As Object, ByVal e As System.EventArgs)
If F IsNot Nothing Then
If F.Visible = True Then
F.Close()
F.Dispose()
F = Nothing
End If
Else
F = New Form
F.Show()
End If
Notify.Text = "Change Application Text Here"
End Sub
End Class
Public Class Startup
<STAThread()> _
Public Shared Sub Main()
Dim N As ApplicationContext = New NotifyApplicationContext
Application.Run(N)
End Sub
End Class