如何切换到处理特定文档

本文关键字:文档 处理 何切换 | 更新日期: 2023-09-27 18:33:33

>假设我们有一个文本编辑器应用程序,每个表单运行一个单独的进程。该应用程序是单个文档(即没有选项卡或MDI(。

我们打开了三份表格,其中包含三份文件,A.txt、B.txt 和 C.txt。现在,用户双击其桌面上的 B.txt 文件。这将启动相关应用程序的新实例。这个启动的编辑器实例现在应该退出并聚焦/置于已加载此文件的进程的前面,以便用户最终不会以两个单独的形式加载相同的文档。

我怎样才能最轻松地实现这一目标?换句话说,如何找到哪个进程已经显示文档?

打开

后,应用程序不会打开这些文件,因此我不能依靠枚举进程的文件句柄来查找进程。我认为这需要进程之间的某种形式的沟通。理想情况下,我正在寻找一个 .NET 解决方案,但这个问题确实与 Windows 相关/与语言无关。

编辑:我应该提到,由于各种原因,我正在尝试使用单独的进程,而不是在单个进程中运行所有表单。

如何切换到处理特定文档

解决此问题的一个好方法是使用互斥体:使用互斥体运行应用程序的单个实例

您可以使用当前应用程序名称 + 文件名(或其他内容(打开互斥锁,然后在它已经打开时切换到该进程。

第二种解决方案是将 WCF 与管道绑定一起使用。在服务上调用某种"激活"方法,让应用程序激活自身。此链接提供了一些进行进程间通信的方法。

我将发布使用的解决方案: 当应用程序实例打开文档时,我会在文档旁边转储一个 .pid/.lock 文件,其中包含进程的 pid。这样,我可以切换到打开文档的进程,或者在该进程不再存在时清除锁定。