2014-01-13 4 views
2

Я видел несколько ссылок на Stack Overflow об использовании класса Timer, чтобы делать то, что хочу, но я не уверен, что это правильное решение проблемы.Наличие приложения winforms ждет несколько минут, прежде чем продолжить

В принципе, у меня есть кнопка (в .NET 4.0), при нажатии будет проходить через несколько различных подпрограмм и делать определенные вещи:

  • Restart некоторые услуги
  • запустить приложение командной строки, которая заканчивается автоматически
  • Запустите второе приложение командной строки, которая заканчивается автоматически
  • запустить приложение третьей командной строки, которая заканчивается автоматически

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

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

Я думал о объекте Timer, но я не уверен, что на самом деле это приведет к паузе, прежде чем делать следующее.

Я использую метод Process.Start для запуска приложений командной строки, поэтому он фактически не вызывает событие. Должна ли я просто подпрограмме поднять событие, а затем третий метод Process.Start ждать, пока это событие не сгорит?

+0

'Await Task.Delay (х)' – SLaks

+0

следовало бы упомянуть, что я пытаюсь придерживаться .NET Framework 4.0. Похоже, это всего 4,5. –

+0

Установите 'Microsoft.Bcl.Async' из NuGet – SLaks

ответ

0

Этот небольшой фрагмент может вам помочь. Попытайтесь получить идею и реализовать свой собственный код.

 try 
    { 
     Process myProcess; 
     myProcess = Process.Start("Notepad.exe"); 
     while (true) 
     { 
      if (!myProcess.HasExited) 
      { 
       // Discard cached information about the process. 
       myProcess.Refresh(); 
       // Print working set to console. 
       Console.WriteLine("Physical Memory Usage: " 
            + myProcess.WorkingSet.ToString()); 
       // Wait 2 seconds. 
       Thread.Sleep(2000); 
      } 
      else { 
       break; 
      } 
     } 

     // Close process by sending a close message to its main window. 
     myProcess.CloseMainWindow(); 
     // Free resources associated with process. 
     myProcess.Close(); 

    } 
    catch(Exception e) 
    { 
     Console.WriteLine("The following exception was raised: "); 
     Console.WriteLine(e.Message); 
    } 
Смежные вопросы