Развернуть приложение в системном трее? - PullRequest
7 голосов
/ 06 января 2011

Я написал небольшое приложение WPF, которое при закрытии сворачивает в системный трей (требование заказчика).Двойной щелчок вызывает всплывающее окно, или при щелчке правой кнопкой мыши появляется контекстное меню для выхода.

Но если приложение свернуто, и пользователи переходят к Пуск-> Все программы-> Приложение, оно запускает новый экземпляр.

Что (в C #) мне нужно сделать, чтобы приложение максимально развернуло работающий экземпляр, если пользователь делает это, а не запускает новый экземпляр?

Спасибо!

1 Ответ

7 голосов
/ 06 января 2011

Этот ответ от Джона Скита обсуждает использование мьютекса для этого

Мутекс - это путь.Это гораздо менее хрупко, чем использование имен процессов и т. Д.

Однако вы должны убедиться, что 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());
   }
}

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

...