WPF On Start检测进程是否已启动并将应用程序置于最前面

我有一个非常简单的问题。

程序启动后,用户尝试启动另一个实例。 新实例需要将旧实例放在前面并退出。

解决方案非常简单,我可以从http://www.codeproject.com/KB/cs/oneprocessonly.aspx获取代码并完成它。

幸运/不幸的是我正在使用WPF。 这意味着,我无法控制Main()方法的内容。

我找到了解决这个问题的方法“如何在我的WPF应用程序中提供自己的Main()方法?” @ http://learnwpf.com/Posts/Post.aspx?postId=a5643949-ab80-47f9-93c8-f5e8e5782d34 。

但是,当没有App.xaml文件时,这个解决方案会带来像Expression Blend stats这样的另一个问题。

我可以使用App类OnStarted事件,但我正在使用WPF的启动画面资源,这意味着将显示额外的启动画面。

我对这种方法的最后一个担忧是接缝不能“面向未来”给我:(。

这个问题有没有WPF风格的解决方案?

先感谢您。

我相信这个链接可以帮到你: C#单实例应用程序

您通常通过在应用程序中设置互斥锁来检测正在运行的实例,然后在启动应用程序时检查该互斥锁。 将其他应用程序发送到前端是发送正确的PostMessage的问题。

有了你自己的Main(),我同意当你的App.xaml不存在时,Expression Blend确实有点怪异。 在我自己的应用程序中,我使用Expression Blend手动编辑一些复杂的Windows,但不在应用程序中进行任何编译或测试(主要在App.cs中定义)。

如果你正在使用Expression Blend进行广泛的UI测试,我不能说你必须使用这种方法。 我倾向于在Visual Studio中进行大部分编辑和测试,并直接编辑XAML,所以对我来说这不是一个问题。 我认为这是Expression Blend个人的限制(或错误?)。