我目前在我的应用中使用互斥锁,只允许运行1个实例。我的问题是,我现在如何获取此代码,并将其转换为关闭当前运行的实例并允许打开一个新代码?
我想解决的问题:我的应用程序接受了args并且需要经常使用新的params重新打开。目前,没有互斥锁,它可以无限次打开。我想只使用最新的一组参数来运行一个实例。
谢谢, 凯文
bool createdMutex = true;
Mutex mutex = new Mutex(true, "VideoViewerApp", out createdMutex);
if (createdMutex && mutex.WaitOne())
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmVideo(args[0], args[1], args[2], args[4], args[5]));
mutex.ReleaseMutex();
}
mutex.close();
答案 0 :(得分:2)
互斥体不适用于进程间事件通知,因此无法使用互斥锁关闭其他进程。我建议做的是像this question.
中推荐的那样我会把这两个答案结合起来,就像我用过的那样:
Process[] processes = Process.GetProcesses();
string thisProcess = Process.GetCurrentProcess().MainModule.FileName;
string thisProcessName = Process.GetCurrentProcess().ProcessName;
foreach (var process in processes)
{
// Compare process name, this will weed out most processes
if (thisProcessName.CompareTo(process.ProcessName) != 0) continue;
// Check the file name of the processes main module
if (thisProcess.CompareTo(process.MainModule.FileName) != 0) continue;
if (Process.GetCurrentProcess().Id == process.Id)
{
// We don't want to commit suicide
continue;
}
// Tell the other instance to die
process.CloseMainWindow();
}