我有一个UserControl
可以通过Main
从Button
应用程序打开。另一个UserControl
这个App
应用中提供了相同的second
,只显示UserControl
的窗口。现在我需要知道这个控件是否已经从MainApplication
启动,如果是,那么我需要阻止启动second
应用。
我实际上尝试了两种“解决方案”:
1。使用流程
Process current = Process.GetCurrentProcess();
foreach (Process p in Process.GetProcessesByName(current.ProcessName))
{
if (p.Id != current.Id)
{
break;
}
}
此代码检查Process是否已在执行中。该解决方案不起作用,因为当我从UserControl
应用启动Main
,然后运行second
应用时,我有两个UserControl
实例。
2。使用Mutex
bool createdNew;
_mutex = new Mutex(true, "UserControlName", out createdNew);
if (!createdNew)
{
//Check for other instance
Process current = Process.GetCurrentProcess();
foreach (Process p in Process.GetProcessesByName(current.ProcessName))
{
if (p.Id != current.Id)
{
break;
}
}
return true;
}
else
{
_mutex?.Close();
return false;
}
此解决方案只有在我从UserControl
应用中运行Main
时才有效,特别是如果我从{{1}运行此代码,则无法再显示UserControl
app,然后我得到了second
的两个实例。
我该如何处理?
更新
我发布的所有代码都添加到了UserControl
构造函数中,如果你想测试一下,你只需要将代码粘贴到构造函数中,就是这样。