2

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

backgroundworkerのDoWorkは次のとおりです(他のアプリにログインするためのクラス呼び出しだけですが、情報のためだけです)。

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

他の誰かがこれを引き起こしている可能性があるもの、またはおそらくこれをさらにデバッグする方法についてのアイデアを持っていますか?私はパターンを見ずにこれに頭をぶつけてきたので、別の目が非常にありがたいです。:)私はこれをMSDNwinformsフォーラムにも投稿しましたが、これまでのところ運がありませんでした。

4

1 に答える 1

0

以前のインスタンスを破棄せずに新しいインスタンスを作成するアプリケーションで、このようなものを何年も前に見たのを覚えてNotifyIconいます。

于 2011-01-18T19:41:54.250 に答える