【发布时间】:2012-03-07 12:30:47
【问题描述】:
我正在开发 WinForms。现在我想实现一件事:当我点击桌面应用程序的快捷方式,然后应用程序处于最小化状态时,它将从系统托盘打开(不是创建新实例)。
【问题讨论】:
我正在开发 WinForms。现在我想实现一件事:当我点击桌面应用程序的快捷方式,然后应用程序处于最小化状态时,它将从系统托盘打开(不是创建新实例)。
【问题讨论】:
好的,所以当你双击快捷方式时,实际上会打开另一个应用程序实例,它不知道已经最小化到托盘的那个实例。
本质上,您想检测您的应用程序的另一个实例是否在启动时运行。如果是,请告诉您应用的现有实例向用户显示其 UI,然后退出。
您的解决方案包括两件事:
1.让您的应用了解它的另一个实例已在运行的能力。
这在 .NET 中很简单。当您的应用程序打开时,请使用 Mutex 类。这是一个系统范围的锁,本质上类似于Monitor。
例子:
// At app startup:
bool createdNew;
var mutex = new Mutex(true, Application.ProductName, out createdNew);
if (!createdNew)
{
// Use IPC to tell the other instance of the app to show it's UI
// Return a value that signals for the app to quit
}
// At app shutdown (unless closing because we're not the first instance):
mutex.ReleaseMutex();
2。进程间通信
有几种方法可以在 .NET 中执行 IPC。 WCF 就是其中之一,虽然很重。命名管道可能是您的最佳选择,尽管这是一个非常简单的要求,基本的套接字消息传递也应该工作。
这里有一个关于 .NET 中适当的 IPC 方法的问题的链接,可以帮助您:What is the best choice for .NET inter-process communication?
【讨论】: