C# 如何避免多个应用程序实例?
我有一个应用程序“myprogram.exe”,它调用dll中的函数和代码,其中一个函数“myprogram.exe”调用创建winform的新实例“MyForm.cs”,然后使用form.show()显示它 我可以运行“n”个“myprogram.exe”实例,但我希望每个“myprogram.exe”实例只运行一个“MyForm.cs”实例 我遇到的问题是,即使我在“MyForm.cs”中使用互斥体来创建互斥体,他们也会询问它的一个实例是否已经在运行,有时,它会创建另一个实例,尽管有互斥体C# 如何避免多个应用程序实例?,c#,dll,mutex,C#,Dll,Mutex,我有一个应用程序“myprogram.exe”,它调用dll中的函数和代码,其中一个函数“myprogram.exe”调用创建winform的新实例“MyForm.cs”,然后使用form.show()显示它 我可以运行“n”个“myprogram.exe”实例,但我希望每个“myprogram.exe”实例只运行一个“MyForm.cs”实例 我遇到的问题是,即使我在“MyForm.cs”中使用互斥体来创建互斥体,他们也会询问它的一个实例是否已经在运行,有时,它会创建另一个实例,尽管有互斥体
是否有另一种方法可以用来验证“myprogram.exe”的实例是否已经创建了“MyForm.cs”的实例。根据@Joe的评论,问题可能在于Mutux的实现中 演示正确的操作方法: 斯科特·艾伦(K.ScottAllen)一直致力于为此目的使用互斥锁,并且您将在GC中遇到一些问题 如果我只想让应用程序的一个实例在机器上的所有会话中运行,我可以将命名的互斥体放入带有前缀“global\”的全局命名空间中
[STAThread]
static void Main()
{
using(Mutex mutex = new Mutex(false, "Global\\" + appGuid))
{
if(!mutex.WaitOne(0, false))
{
MessageBox.Show("Instance already running");
return;
}
Application.Run(new Form1());
}
}
根据@Joe的评论,问题可能出在Mutux的实现中 演示正确的操作方法: 斯科特·艾伦(K.ScottAllen)一直致力于为此目的使用互斥锁,并且您将在GC中遇到一些问题 如果我只想让应用程序的一个实例在机器上的所有会话中运行,我可以将命名的互斥体放入带有前缀“global\”的全局命名空间中
[STAThread]
static void Main()
{
using(Mutex mutex = new Mutex(false, "Global\\" + appGuid))
{
if(!mutex.WaitOne(0, false))
{
MessageBox.Show("Instance already running");
return;
}
Application.Run(new Form1());
}
}
我在下面的链接发布,因为我在C++和MFC中找不到相关文章。因此
对于C++、MFC和Win32,可以使用< P>我在下面的链接中发布,因为我在C++和MFC中找不到任何相关文章。因此
对于C++、MFC和Win32,你可以使用看,我猜你在使用互斥体做了一些错误的事情;一般来说,如果互斥体不能正常工作,就会出现严重的问题。这可能是一个很好的参考:看,我猜你对互斥体做了一些错误的事情;总的来说,如果互斥不起作用,就会出现严重的问题。这可能是一个很好的参考:谢谢。我正要发布一个类似的问题,我发现这个答案非常有用!!谢谢我正要发布一个类似的问题,我发现这个答案非常有用!!