Pergunta

Escrevi um pequeno aplicativo WPF que, quando 'fechado', minimiza a bandeja do sistema (requisito do cliente). O clique duas vezes compra o backup ou o clique com o botão direito do mouse, fornece um menu de contexto para sair.

Mas se o aplicativo for minimizado e os usuários navegam para iniciar-> todos os programas-> O aplicativo inicia uma nova instância.

O que (em C#) preciso fazer para obter o aplicativo para maximizar a instância em execução se o usuário fizer isso em vez de iniciar uma nova instância?

Obrigado!

Foi útil?

Solução

este responda de Jon Skeet discute o uso de um mutex para fazer isso

Mutex é o caminho a percorrer. É muito menos frágil do que usar nomes de processos etc.

No entanto, você precisa garantir que o mutex não seja coletado com lixo. No caso de um serviço (que é orientado a eventos, em vez de ter um método "principal" que é concluído), a maneira mais sensata de fazer isso provavelmente é colocá -lo em uma variável estática.

Descarte o Mutex quando o serviço parar, para que você não precise esperar pela finalização ou algo assim.

Matthew Brindley dá este exemplo na mesma pergunta para sua resposta

[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());
   }
}

Para maximizar o outro aplicativo, você precisará enviar a mensagem para maximizar. Veja este artigo sobre envio de mensagens

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top