1

Windows フォームを起動したときに通知アイコンがシステム トレイに表示されないのはなぜですか?
これが私がやっていることです。
Windowsフォームアプリケーションであるトレイアプリケーションを起動するWindowsサービスがあります(現在のユーザーのコンテキストでそのアプリケーションを起動するために偽装を使用しています)。トレイ アプリケーションで、通知アイコンを含むフォームを起動しています。
ここでの問題は、通知アイコンがシステム トレイに表示されないことがあり、その理由がわかりません。
フォームの OnLoad メソッドで、フォームの visible プロパティを false に設定しています。また、私はいくつかのリモーティング サービス コール (ipc など) を行っています。問題ありますか?
通知アイコンを常にシステム トレイに表示するにはどうすればよいですか?
編集: OnLoad 関数のコードは次のとおりです。

protected override void OnLoad(System.EventArgs e)
{
    this.Visible = false;
    //Get some value from registry
    CheckForStealthMode();
    GetLoginType();
    bool GetProbeStatus = false;
    ServiceActivityInterface remoteMethods = null;
    do
    {
        try
        {
            remoteMethods = (ServiceActivityInterface)Activator.GetObject(typeof(ServiceActivityInterface), "tcp://localhost:18800/ServiceRemoting);
            ProbeStatus = remoteMethods.GetProbeStatus();
            GetProbeStatus = true;
        }
        catch (Exception exception)
        {
            GetProbeStatus = false;
            log.Error("Exception while getting the status of Probe:" + exception.Message);
        }
        finally
        {
            remoteMethods = null;
            if (!GetProbeStatus) 
            {
                Thread.Sleep(5000);
                log.Debug("Retrying to get the probe status.");
            }
        }
    } while (!GetProbeStatus);  
}
4

2 に答える 2

0

今のところ、Notify アイコン コードまたはその他の条件ステートメントの周りにいくつかのブレークポイントを設けて、何かが呼び出されていないかどうかを確認することをお勧めします。何が起こっているのかを診断するのに役立つように、一貫した再現を試してみてください。過去に奇妙な出来事がありましたが、その中で最も混乱したのは時限イベントに関連したものでした

また、これが理想的ではない Thread.Sleep メソッドに関連付けられている場合、これで問題が解決する可能性があります。ユーザーは UI がフリーズするだけです。タイマー クラスの 1 つを使用して、ティックまたは経過イベントを取得して、ユーザーは続行できますが、それでも遅延が発生します。

于 2011-08-18T11:22:01.283 に答える
0

メソッドを見るOnLoadと、例外がスローされた場合に 5 秒ごとに 1 回しか実行できない可能性のある無限ループがあり、例外がログに記録されてからスローされます。Thread.SleepUI スレッドをブロックしていて、通知アイコンの表示を停止している可能性が高い場合。Activator.GetObjectまたは RPC呼び出しを調べGetProbeStatus、RPC コードを別のスレッドに移動して UI のブロックを回避することを検討します。

于 2011-08-18T22:58:39.360 に答える