如何将具有特定启动参数的 WPF 程序限制为仅一个实例
How to restrict WPF programs with specific startup parameters to only one instance
public partial class App : System.Windows.Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var args = e.Args;
if(args.Length!=0)
{
if (args[0] == ("login"))
{
new LoginWindow().Show();//conduct the login procedure
}
if (args[0] == ("restart"))
{
new SmallPanelWindow(2).Show();
}
}
else
{
Environment.SetEnvironmentVariable("WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS", "--proxy-server=\"direct://\"");
new MainWindow().Show();//show mainwindow which is commonly used
}
}
当多次使用参数“login”调用程序时,如何确保 LoginWindow 一次只存在一个?(例如,windows TaskScheduler 中的不同触发器使用“login”调用程序)此外,启动主窗口不会受到影响。
您可以使用 Mutex
来确保一次只有一个进程可以打开 LoginWindow
:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var args = e.Args;
if (args.Length!=0)
{
if (args[0] == ("login"))
{
using (Mutex mutex = new Mutex(false, "8da112cb-a833-4c50-be53-79f31b2135ca"))
{
if (mutex.WaitOne(0, false))
{
new LoginWindow().ShowDialog(); //conduct the login procedure
}
else
{
Environment.Exit(0);
}
}
}
if (args[0] == ("restart"))
{
new SmallPanelWindow(2).Show();
}
}
else
{
Environment.SetEnvironmentVariable("WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS", "--proxy-server=\"direct://\"");
new MainWindow().Show();//show mainwindow which is commonly used
}
}
根据您的要求,您可能希望将 SmallPanelWindow
的初始化移动到 using
语句中,但上面的示例代码应该给了您想法。
public partial class App : System.Windows.Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var args = e.Args;
if(args.Length!=0)
{
if (args[0] == ("login"))
{
new LoginWindow().Show();//conduct the login procedure
}
if (args[0] == ("restart"))
{
new SmallPanelWindow(2).Show();
}
}
else
{
Environment.SetEnvironmentVariable("WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS", "--proxy-server=\"direct://\"");
new MainWindow().Show();//show mainwindow which is commonly used
}
}
当多次使用参数“login”调用程序时,如何确保 LoginWindow 一次只存在一个?(例如,windows TaskScheduler 中的不同触发器使用“login”调用程序)此外,启动主窗口不会受到影响。
您可以使用 Mutex
来确保一次只有一个进程可以打开 LoginWindow
:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var args = e.Args;
if (args.Length!=0)
{
if (args[0] == ("login"))
{
using (Mutex mutex = new Mutex(false, "8da112cb-a833-4c50-be53-79f31b2135ca"))
{
if (mutex.WaitOne(0, false))
{
new LoginWindow().ShowDialog(); //conduct the login procedure
}
else
{
Environment.Exit(0);
}
}
}
if (args[0] == ("restart"))
{
new SmallPanelWindow(2).Show();
}
}
else
{
Environment.SetEnvironmentVariable("WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS", "--proxy-server=\"direct://\"");
new MainWindow().Show();//show mainwindow which is commonly used
}
}
根据您的要求,您可能希望将 SmallPanelWindow
的初始化移动到 using
语句中,但上面的示例代码应该给了您想法。