Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何避免多个应用程序实例?_C#_Dll_Mutex - Fatal编程技术网

C# 如何避免多个应用程序实例?

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”,它调用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,你可以使用

看,我猜你在使用互斥体做了一些错误的事情;一般来说,如果互斥体不能正常工作,就会出现严重的问题。这可能是一个很好的参考:看,我猜你对互斥体做了一些错误的事情;总的来说,如果互斥不起作用,就会出现严重的问题。这可能是一个很好的参考:谢谢。我正要发布一个类似的问题,我发现这个答案非常有用!!谢谢我正要发布一个类似的问题,我发现这个答案非常有用!!