我正在研究WinForms。现在我想实现一件事:当我点击桌面应用程序的快捷方式,然后应用程序处于最小化状态时,它将从系统托盘打开(不创建新实例)。
答案 0 :(得分:1)
好的,当您双击快捷方式时,实际上会打开另一个应用程序实例,该应用程序不知道已经最小化到托盘的那个实例。
基本上,您希望检测应用程序的另一个实例是否在启动时运行。如果是,请告诉您应用的现有实例向用户显示其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?