WPF 单实例应用程序
2013-09-17 22:08
239 查看
例如:Microsoft Word,不管打开多少个文档(也不管它们是如何打开的),一次只能加载 winword.exe 一个实例。 这便是单实例应用程序。
对于这种单实例应用程序,WPF 本身并未提供解决方法,但是可以使用几种变通的方法。基本的技术是当触发 Application.StartUp 事件时,检查另一个应用程序是否正在运行。最简单的方法是使用一个全局的 mutex 对象(mutex对象是操作系统提供的一个用于进程之间通信的同步对象)。这种方法很简单但是功能有限——最重要的是,应用程序新实例无法和已经存在的实例进行通信。 因为当你打开文件的时候,比如*.doc 你需要将该文件的一些基本信息传递到已打开的实例中才行。 当然,你还可以使用 remoting、WCF 进行通信。那还得开发服务端,也使其变得复杂。
但是最简单的实现方法,并且也是WPF团队当前推荐的方法是,使用Windows窗体提供的内置支持,这一内置支持最初是用于 Visual Basic 应用程序的。这种方法在后台处理杂乱的问题。
那么,如何使用为 Windows 窗体和 Visual Basic 设计的这一特性,来管理使用 C# 开发的 WPF 应用程序呢?本质上,老式的应用程序类充当了 WPF 应用程序类的一个包装器。当启动应用程序时,创建老式的应用程序类,然后老式的应用程序类创建WPF程序应用类。老式的应用程序类处理实例管理问题,而 WPF 应用程序类处理真正的应用程序。 下图显示了这几部分的交互方式。
了解以上内容后,下载源码研究就简单啦,在传个实战运行效果上来:
源码下载:http://files.cnblogs.com/andrew-blog/1023_SingleInstanceApplication.rar
源码说明:*.testDoc 请以右键 -- 打开方式 选择 1023_SingleInstanceApplication.exe 程序进行打开即可。 (你也可以在windows中注册*.testDoc文件,双击打开即可,注册方法可以采用源码中注释掉的部分 FileRegistrationHelper 类使用Microsoft.Win32 命名空间中的类进行注册,但这需要管理员权限)
参考:http://www.wxzzz.com/?id=134
对于这种单实例应用程序,WPF 本身并未提供解决方法,但是可以使用几种变通的方法。基本的技术是当触发 Application.StartUp 事件时,检查另一个应用程序是否正在运行。最简单的方法是使用一个全局的 mutex 对象(mutex对象是操作系统提供的一个用于进程之间通信的同步对象)。这种方法很简单但是功能有限——最重要的是,应用程序新实例无法和已经存在的实例进行通信。 因为当你打开文件的时候,比如*.doc 你需要将该文件的一些基本信息传递到已打开的实例中才行。 当然,你还可以使用 remoting、WCF 进行通信。那还得开发服务端,也使其变得复杂。
但是最简单的实现方法,并且也是WPF团队当前推荐的方法是,使用Windows窗体提供的内置支持,这一内置支持最初是用于 Visual Basic 应用程序的。这种方法在后台处理杂乱的问题。
那么,如何使用为 Windows 窗体和 Visual Basic 设计的这一特性,来管理使用 C# 开发的 WPF 应用程序呢?本质上,老式的应用程序类充当了 WPF 应用程序类的一个包装器。当启动应用程序时,创建老式的应用程序类,然后老式的应用程序类创建WPF程序应用类。老式的应用程序类处理实例管理问题,而 WPF 应用程序类处理真正的应用程序。 下图显示了这几部分的交互方式。
了解以上内容后,下载源码研究就简单啦,在传个实战运行效果上来:
源码下载:http://files.cnblogs.com/andrew-blog/1023_SingleInstanceApplication.rar
源码说明:*.testDoc 请以右键 -- 打开方式 选择 1023_SingleInstanceApplication.exe 程序进行打开即可。 (你也可以在windows中注册*.testDoc文件,双击打开即可,注册方法可以采用源码中注释掉的部分 FileRegistrationHelper 类使用Microsoft.Win32 命名空间中的类进行注册,但这需要管理员权限)
参考:http://www.wxzzz.com/?id=134
相关文章推荐
- Winform and WPF 第二遍双击快捷方式或应用程序打开原来的应用程序而不新建一个实例[进程通信 1]
- WPF(四)Application3:如何实现单实例的应用程序(Single Instance)
- WPF之创建单实例应用程序
- WPF 单实例应用程序
- WPF:如何实现单实例的应用程序(Single Instance)
- WPF:如何实现单实例的应用程序(Single Instance)
- 使用 WPF 创建单实例应用程序
- WPF学习笔记 - 如何用WPF创建单实例应用程序
- WPF学习笔记 - 如何用WPF创建单实例应用程序
- WPF:如何实现单实例的应用程序(Single Instance)
- WPF:如何实现单实例的应用程序(Single Instance)
- WPF:实现主应用程序单一实例运行方式总结
- Oracle 远程访问配置 在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标 C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素” C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper Decimal类型截取保留N位小数向上取, Decimal类型截取保留N位小数并且不进行四舍五入操作
- WPF实现单进程实例应用程序(像Word一样可以打开多个文件)
- WPF:如何实现单实例的应用程序(Single Instance)
- Wpf 鼠标拖动元素实例
- Android应用程序组件Content Provider应用实例(4)
- 在WinForm应用程序中嵌入WPF控件
- 一个应用程序实例
- 在VS2010中设计一个程序中打开另一个应用程序的实例