[英]Prevent multiple windows application instances
我有一个应用程序,可以通过2种不同的方式使用它,具体取决于我是否将参数传递给main。 使用以下示例代码,我可以:
-启动多个实例,每个实例都有唯一的参数
-启动一个不带参数的实例
static void Main(string[] args)
{
string mutexName = "";
if (args.Length > 0)
{
mutexName = args[0];
} else
{
mutexName = "NoArgs";
}
using (Mutex appMutex = new Mutex(false, String.Format("{0}-{1}", mutexName, appGuid)))
{
if (!appMutex.WaitOne(0, false))
{
MessageBox.Show("Instance already running");
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
完美的作品! 但是我也希望带有参数且没有参数的应用程序相互排斥。 如图所示。如果打开了一个或多个带有参数的应用程序,则无法启动没有参数的程序,反之亦然,如果打开了不带参数的程序,则无法启动任何带参数的程序。
有人知道我该如何做到吗? 我已经尝试过使用互斥锁采用不同的方式,而且我开始认为使用互斥锁无法做到这一点。 否则我将需要“组”互斥锁或其他东西。
您是说,如果启动了NoArgs
应用程序,则无法启动其他应用程序。 因此,请直接检查此内容。
然后:
您无法使用互斥锁确定是否已经启动了剩余的应用程序。 为此,您需要一个计数互斥 量 ,也称为信号量 。 您可以使用信号量来确定启动的应用程序数量。 然后,对于“ NoArgs”情况,您需要一个互斥锁,对于每个参数传递的互斥锁名称,都需要一个互斥锁,并需要一个信号灯来计数成功启动的应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.