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

时间:2009-06-04 15:36:03

标签: c# .net wpf process

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

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

解决方案非常简单,我可以从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风格的解决方案?

提前谢谢你。

1 个答案:

答案 0 :(得分:6)

我相信此链接可能会对您有所帮助:C# Single Instance Application

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

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

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