У меня проблема с приложением, в котором на моем NotifyIcon отображается дополнительный значок.Шаги по его воспроизведению просты, но проблема в том, что дополнительный значок появляется после любого кода, который мы добавили.Проще говоря, нажатие на кнопку запускает выполнение метода FooBar (), который прекрасно работает, но его основной обязанностью является запуск фонового работника для входа в другое из наших приложений.Он появляется только при нажатии этой конкретной кнопки.
Как ни странно, у нас есть переопределение метода WndProc, и если я буду проходить до тех пор, пока не появится дополнительный NotifyIcon, он всегда появляется во время этого метода, так что что-то еще за пределами кодавызывая поведение.Наш метод WndProc в настоящее время (хотя я не думаю, что он вызван WndProc):
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
'Check for WM_COPYDATA message from other app or drag/drop action and handle message
If m.Msg = NativeMethods.WM_COPYDATA Then
' get the standard message structure from lparam
Dim CD As NativeMethods.COPYDATASTRUCT = m.GetLParam(GetType(NativeMethods.COPYDATASTRUCT))
'setup byte array
Dim B(CD.cbData) As Byte
'copy data from memory into array
Runtime.InteropServices.Marshal.Copy(New IntPtr(CD.lpData), B, 0, CD.cbData)
'Get message as string and process
ProcessWMCopyData(System.Text.Encoding.Default.GetString(B))
'empty array
Erase B
'set message result to 'true', meaning message handled
m.Result = New IntPtr(1)
End If
'pass on result and all messages not handled by this app
MyBase.WndProc(m)
End Sub
Единственное место в коде, где манипулирует рассматриваемый NotifyIcon, находится в следующем обработчике событий (опять же, не думайте, что это виновник, но просто для дополнительной информации):
Private Sub TrayIcon_MouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TrayIcon.MouseDoubleClick
If Me.Visible Then
Me.Hide()
Else
PositionBottomRight()
Me.Show()
End If
End Sub
DoWork фонового работника выглядит следующим образом (просто вызов класса для входа в наше другое приложение, но опять же только дляinfo):
Private Sub LoginBackgroundWorker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles LoginBackgroundWorker.DoWork
Settings.IsLoggedIn = _wdService.LogOn(Settings.UserName, Settings.Password)
End Sub
У кого-нибудь еще есть идеи о том, что может быть причиной этого или как, возможно, продолжить отладку этого?Я бился головой об этом, не видя узора, поэтому очень хотелось бы получить еще один набор глаз.:) Я также разместил это на форумах winforms MSDN, и мне пока не повезло.