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

标签 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 统计信息会出现 panic 。

我可以使用 App 类的 OnStarted 事件,但我使用的是 WPF 的初始屏幕资源,这意味着将显示额外的初始屏幕。

我对这种方法的最后一个担心是它对我来说不是“面向 future 的”:(。

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

提前致谢。

最佳答案

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

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

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

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

关于c# - WPF On Start 检测进程是否启动并将应用程序置于最前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/951331/

相关文章:

c# - 找不到预启动任务 'build'

c# - 应用程序如何使用与本地相同的语法识别 key 保管库中的 secret ?

c# - 如何从一些由 .NET EmailAddress DataAnnotation 支持的 POST 表单数据中修剪空格

c# - 如何访问 KnownFolders.DocumentsLibrary

c# - 使代理/服务类更通用

.net - 如何调用本地WCF服务?

c# - 更新配置文件并更新应用程序中的值

c# - 如何使用azure sql进行多接口(interface)框架

wpf - 在 WPF 中嵌入 Windows Media Player

wpf - 使用 WPF 和数据绑定(bind)将文件拖放到应用程序窗口中