【问题标题】:WPF On Start detect if process is started and bring application to frontWPF On Start 检测进程是否已启动并将应用程序置于最前面
【发布时间】:2009-06-04 15:36:02
【问题描述】:

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

当程序已启动并且用户尝试启动另一个实例时。该新实例需要将旧实例置于最前面并退出。

解决方案非常简单,我可以从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# .net wpf process


    【解决方案1】:

    我相信这个链接可以帮助你:C# Single Instance Application

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

    就拥有自己的 Main() 而言,我同意当您的 App.xaml 不存在时,Expression Blend 确实会表现得有些奇怪。在我自己的应用程序中,我使用 Expression Blend 手动编辑一些复杂的 Windows,但不在应用程序中进行任何编译或测试(在 App.cs 中定义了 main)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2010-10-15
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多