0

まず、「2回目の起動」について説明します。このSingleInstanceControllerアプローチを使用して、アプリのEXEファイルを呼び出し、引数を受け入れることができるようにします。

そうすれば、他のアプリやユーザーは、特定のアクションを実行するようにアプリケーションに指示できます。

アプリはので開始するように設定されておりWindowStateMinimizedユーザーがトレイアイコンをクリックした場合にのみに復元されNormalます。

しかし、私が見ているのは、アプリケーションを初めて起動したときは最小化されたままであるということです。次に、EXEファイルを2回呼び出すと、通常のウィンドウ状態に戻ります。

ウィンドウの状態を変更するコードはありません。

これは、他の何かが復元をトリガーしているためだと思います。

私のコードはSingleInstanceController次のようになります。

public class SingleInstanceController : WindowsFormsApplicationBase
{
    public SingleInstanceController()
    {
        IsSingleInstance = true;

        StartupNextInstance += this_StartupNextInstance;
    }

    void this_StartupNextInstance(object sender, StartupNextInstanceEventArgs e)
    {
        Form1 form = MainForm as Form1;
        string command = e.CommandLine[1];

        switch (command.ToLowerInvariant())
        {
            case "makecall":
                string phoneNumber = e.CommandLine[2];
                PhoneAppHelper.MakePhoneCall(phoneNumber);
                break;
            default:
                System.Windows.Forms.MessageBox.Show("Argument not supported");
                break;
        }
    }

    protected override void OnCreateMainForm()
    {
        MainForm = new Form1();
    }
}

私のフォームには、接続されたデバイス(USB)を表示するリストボックスと、ほとんどがデバッグ/情報の目的でいくつかのアクティビティを表示する複数行のテキストボックスがあります。

フォーム上のコントロールとの相互作用により、復元が発生する可能性がありますか?

4

1 に答える 1

1

はい、これはWindowsFormsApplicationBase.OnStartupNextInstance()のデフォルトの動作です。イベントを使用する代わりにメソッドをオーバーライドすることで、これを簡単に修正できます。表示するメッセージがある場合でも、おそらくこれを実行したいことに注意してください。したがって、次のように表示します。

protected override void OnStartupNextInstance(StartupNextInstanceEventArgs e) {
    //...
    switch (command.ToLowerInvariant()) {
        // etc..
        default:
            base.OnStartupNextInstance(e);   // Brings it to the front
            System.Windows.Forms.MessageBox.Show("Argument not supported");
            break;
    }
}
于 2013-03-19T23:34:31.977 に答える