2014-01-13 93 views
2

我已經在堆棧溢出中看到了一些關於使用Timer類來做我想做的事情的參考資料,但我不相信這是正確的解決方案。讓Winforms應用程序等待幾分鐘後再繼續

基本上,我有一個按鈕(在.NET 4.0中),當點擊會經過幾個不同的子程序和做某些事情:

  • 重新啓動一些服務
  • 啓動命令行應用程序完成自動
  • 啓動自動完成
  • 啓動第三命令行應用程序,自動完成
第二命令行應用程序

我現在面臨的問題是,程序只是通過每一件事情並儘快將其關閉 - 除了第三個命令行應用程序必須僅在前三個完成之後觸發外,這不是問題。

我有一個sleep調用的代碼,除了這凍結了用戶界面,我有這個應用程序,我想更新,讓用戶知道事情正在發生的狀態欄。

我正在考慮Timer對象,但我不確定那會在做下一件事情之前真正導致暫停。

我正在使用Process.Start方法來關閉命令行應用程序,因此它實際上並不引發事件。我應該只是讓我的子程序提出一個事件,然後讓第三個方法等待事件在它發生之前觸發?

+0

'Await Task.Delay(x)' – SLaks

+0

應該提到我試圖堅持.NET框架4.0。看起來這只是4.5。 –

+0

從NuGet安裝'Microsoft.Bcl.Async' – 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); 
    } 
相關問題