C# 最小化WinForms应用程序在第二次启动时恢复正常

C# 最小化WinForms应用程序在第二次启动时恢复正常,c#,winforms,C#,Winforms,首先,我想解释一下“第二次启动”:我使用使调用我的应用程序的EXE文件并接受参数成为可能 这样,其他应用程序或用户可以告诉应用程序采取特定的操作 应用程序设置为以WindowState的Minimized启动,并且仅当用户单击任务栏图标时,应用程序才会恢复为Normal 但我看到的是,第一次启动应用程序时,它保持最小化。然后,当我第二次调用EXE文件时,它会恢复到正常的窗口状态 我没有改变窗口状态的代码 我怀疑这是因为其他原因触发了恢复 我的SingleInstanceController的代码

首先,我想解释一下“第二次启动”:我使用使调用我的应用程序的
EXE
文件并接受参数成为可能

这样,其他应用程序或用户可以告诉应用程序采取特定的操作

应用程序设置为以
WindowState
Minimized
启动,并且仅当用户单击任务栏图标时,应用程序才会恢复为
Normal

但我看到的是,第一次启动应用程序时,它保持最小化。然后,当我第二次调用EXE文件时,它会恢复到正常的窗口状态

我没有改变窗口状态的代码

我怀疑这是因为其他原因触发了恢复

我的
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),还有一个多行文本框来显示一些活动,大多数用于调试/信息目的


与窗体上控件的交互是否会导致还原?

是的,这是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;
    }
}

令人惊叹的!以前奇怪的是,只有第二次发射才恢复了窗口状态。手动最小化窗口后,第3、4。。。第n次发射使窗口最小化。