• WPF 单实例应用程序


        例如: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

  • 相关阅读:
    Android Studio学习笔记(1)
    2019全国大学生电子设计大赛总结
    包与常用模块
    模块
    迭代器、生成器与递归调用
    叠加多个装饰器与有参数的装饰器。
    装饰器
    控制指针的移动、函数
    字符编码
    python 数据类型之列表、元组、字典、集合
  • 原文地址:https://www.cnblogs.com/andrew-blog/p/WPF_SingleInstanceApplication.html
Copyright © 2020-2023  润新知