Развернуть приложение в системном трее?

Я написал небольшое приложение 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());
   }
}

Чтобы максимизировать другое приложение, вам нужно отправить ему сообщение для максимизации. Смотрите эту статью о отправке сообщений

Другие вопросы по тегам