Развернуть приложение в системном трее?
Я написал небольшое приложение WPF, которое при закрытии сворачивается в системный трей (требование клиента). Двойной щелчок выдает его обратно, или щелчок правой кнопкой открывает контекстное меню для выхода.
Но если приложение свернуто, и пользователи переходят к Пуск-> Все программы-> Приложение, оно запускает новый экземпляр.
Что (в C#) мне нужно сделать, чтобы приложение максимально развернуло работающий экземпляр, если пользователь делает это, а не запускает новый экземпляр?
Спасибо!
1 ответ
Этот ответ от Джона Скита обсуждает использование мьютекса для этого
Мутекс это путь. Это гораздо менее хрупко, чем использование имен процессов и т. Д.
Тем не менее, вы должны убедиться, что Mutex не является сборщиком мусора. В случае службы (которая управляется событиями, а не имеет "основного" метода, который выполняется до конца), наиболее разумный способ сделать это, вероятно, поместить его в статическую переменную.
Удалите мьютекс, когда служба останавливается, поэтому вам не нужно ждать завершения или чего-то подобного.
Мэтью Бриндли приводит этот пример в том же вопросе для своего ответа
[STAThread]
static void Main()
{
using(Mutex mutex = new Mutex(false, "Global\\" + appGuid))
{
if(!mutex.WaitOne(0, false))
{
MessageBox.Show("Instance already running");
return;
}
Application.Run(new Form1());
}
}
Чтобы максимизировать другое приложение, вам нужно отправить ему сообщение для максимизации. Смотрите эту статью о отправке сообщений