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次发射使窗口最小化。