我有一个MDI文件查看器。也就是说,我的程序可以在单个实例中打开多个文件。顺便说一下,我的应用程序不是单个实例应用程序,因此用户可以根据需要打开任意数量的实例。
我想要的行为是
When the user double-clicks a file in Windows Explorer,
if there is an existing instance of my application,
then open the file with that instance
else
open the file with a new instance.
我认为这种行为很常见。 Internet Explorer 9就像。所以,我相信一定有很多人已经实现了这一点。是否有任何完善的.NET(C#是首选的)示例代码(如果可能,不使用Win32 API)?
我想这个算法可能类似于以下内容,但我不知道它是最好还是最干净的代码来实现它(不使用Win32 API)。
At the program's start up
1)If there are arguments in Main(),
check for existing instances.
2)If an instance exists,
send a message to the instance so that it can open the file.
Then exit.
3)else
open the file.
---- -----增补 对于那些用现有答案回答我的问题的人。
我的申请不是单身申请!请。它就像Internet Explorer 9.我在看WCF P2P,因为我必须向我的应用程序的每个运行实例广播一个文件打开消息,然后选择其中一个。但是使用WCF P2P似乎有很多工作要做,因为它似乎是打开和监听TCP端口。什么是最佳做法?
答案 0 :(得分:1)
编辑:由于您的应用程序不是单身,请检查 Doc Brown 指出的链接(Opening a "known file type" into running instance of custom app - .NET), Joel Martinez在该链接中有相关答案
我会引用 他的 回复以供快速参考:
我这样做的方式是这样的:
- 主要方法的第一件事,检查现有的进程列表 应用程序的实例。
- 如果找到,请使用发送文件名/路径到已运行的实例 你最喜欢的进程间 沟通方法(sending windows messages,远程处理,wcf等)
- 关闭Windows尝试启动的新进程(因为现有的 实例已经处理了文件打开 操作
醇>
我猜你已经知道如何做IPC考虑到你已经通过WCF P2P,但如果没有,我也会删除它的链接。虽然答案针对的是单身人士情景,但它也适合您。只需按创建日期时间或适合您方案的任何条件选择最后一个实例。
请注意,您无法通过此方法获取最后一个活动实例,而无需亲自以某种方式跟踪该实例并从新实例中轮询该信息。
答案 1 :(得分:1)