Как избежать нескольких экземпляров приложения? - PullRequest
1 голос
/ 19 июня 2009

У меня есть приложение «myprogram.exe», которое вызывает функции и код внутри DLL, одна из функций, которую вызывает «myprogram.exe», создает новый экземпляр winform, «MyForm.cs», а затем показывает это с помощью form.show ();.

У меня может быть запущено несколько экземпляров «myprogram.exe», но я хочу иметь только один экземпляр «MyForm.cs» для каждого экземпляра «myprogram.exe».

Проблема, с которой я столкнулся, заключается в том, что я даже думал, что я использую мьютекс внутри «MyForm.cs» для создания мьютекса, и они спрашивают, запущен ли его экземпляр, иногда он создает другой экземпляр, несмотря на мьютекс.

Есть ли другой способ, который я могу использовать для проверки, если экземпляр «myprogram.exe» уже создал экземпляр «MyForm.cs».

Ответы [ 2 ]

4 голосов
/ 19 июня 2009

Согласно комментарию @ Джо, проблема, вероятно, заключается в реализации Mutux.

Этот ответ на другой вопрос демонстрирует правильный способ сделать это:

K. Скотт Аллен имеет хорошую справку об использовании Mutex для этой цели и проблем, с которыми вы столкнетесь с GC.

Если я хочу, чтобы во всех сеансах на компьютере работал только один экземпляр приложения, я могу поместить именованный мьютекс в глобальное пространство имен с префиксом «Global \».

[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());
   }
}
1 голос
/ 13 апреля 2010

Я публикую ниже ссылку, так как я не смог найти связанных статей на C ++ и MFC. Следовательно, Для C ++, MFC и Win32 вы можете использовать http://flounder.com/nomultiples.htm

...