我有一个应用程序,"myprogram.exe",它调用dll中的函数和代码,"myprogram.exe“调用的其中一个函数创建winform的新实例"MyForm.cs”,然后使用form.show();显示它。
我可以运行'n‘个"myprogram.exe“实例,但我希望每个"myprogram.exe”实例只有一个"MyForm.cs“实例。
我遇到的问题是,即使我在"MyForm.cs“中使用互斥锁来创建互斥锁,并且他们询问它的一个实例是否已经在运行,有时,尽管存在互斥锁,它还是会创建另一个实例。
是否有其他方法可以用来验证"myprogram.exe“的实例是否已经创建了"MyForm.cs”的实例。
发布于 2009-06-19 09:43:21
根据@Joe的评论,问题很可能存在于Mutux的实现中。
This answer to another question演示了这样做的正确方法:
K.Scott Allen在a good write up上介绍了如何使用互斥锁来达到这个目的,并指出了你在GC中会遇到的问题。
如果我只想让应用程序的一个实例在机器上的所有会话中运行,我可以将命名的互斥锁放入全局名称空间,前缀为“global \”。
STAThread静态void Main() {using(互斥互斥=新互斥(false,“全局\”+ appGuid)) { if(!mutex.WaitOne(0,false)) {MessageBox.Show(“实例已在运行”);return;}Application.Run(新Form1());} }
发布于 2010-04-13 18:11:57
我贴在下面的链接,因为我找不到任何相关的文章在C++和MFC。因此,对于C++、MFC和Win32,您可以使用http://flounder.com/nomultiples.htm
https://stackoverflow.com/questions/1015642
复制相似问题