【发布时间】:2010-09-29 16:51:22
【问题描述】:
如何只允许 WPF 应用程序的一个实例运行?
谢谢。
【问题讨论】:
如何只允许 WPF 应用程序的一个实例运行?
谢谢。
【问题讨论】:
试试这个:Single instance application。我用了第二种方法,效果很好。
【讨论】:
用户sobelito 链接this 帖子,其中包含以下update。它的意思是,对于更新的资源,您应该使用Windows 7 Taskbar Single Instance,如果您查看源代码,您可以做您需要的事情。
您可以使用SingleInstance c# 项目。它还包含 WinForms 和 WPF 的示例。
请注意,它也是在 Apache 2.0 许可下发布的,这与 Arik 在 Microsoft 博客中的 Poznanski 帖子不同,后者 (IANAL, AFAIK) 尚未商业化。
【讨论】:
我使用这个辅助方法并从 application.startup 事件中调用它
Public Sub ForceSingleInstanceApplication()
'Get a reference to the current process
Dim MyProc As Process = Process.GetCurrentProcess
'Check how many processes have the same name as the current process
If (Process.GetProcessesByName(MyProc.ProcessName).Length > 1) Then
'If there is more than one, it is already running
MsgBox("Application is already running", MsgBoxStyle.Critical, My.Application.Info.Title) 'Reflection.Assembly.GetCallingAssembly().GetName().Name)
' Terminate this process and give the operating system the specified exit code.
Environment.Exit(-2)
Exit Sub
End If
End Sub
【讨论】:
查看此解决方案:Allowing only one instance of a WPF application to execute
这不仅会强制执行应用程序的一个实例,而且还会在运行其他应用程序实例时为您当前的应用程序提供焦点。我限制一个实例的互斥锁解决方案实际上与上面的链接不同,但我喜欢这个解决方案的“焦点”元素。
【讨论】:
http://blogs.microsoft.co.il/blogs/arik/archive/2010/05/28/wpf-single-instance-application.aspx
不像其他一些例子所建议的那样需要 VB.DLL。 有 WPF 示例代码。 将任何 cmd 行参数传递给初始实例。
【讨论】: