2012-09-26 27 views
4

我有一個c#wpf應用程序,在main()方法中,我檢查某個條件,如果它是真的,我運行一個不同的進程,但是,我需要在某個超時後啓動進程。因此,例如:在C#中的特定時間間隔後啓動一個進程?

override OnStartUp() 

    { 
      if(condition == true) 
      { 
       ProcessStartInfo p = new ProcessStartInfo("filePath"); 
       p.Start(); // This should wait for like say 5 seconds and then start. 
        return; // This will exit the current program. 
      } 
    } 

我可以使用Thread.Sleep(),但也會導致當前的程序睡眠。換句話說,我希望當前的程序立即終止,然後在5秒後啓動新的進程。

謝謝!

這可能嗎?

+1

使用'Timer'到X一段時間後 – Servy

+1

執行一些動作@Servy:在當前進程已經終止後,這不會導致行動。 –

+0

是的..當前進程必須終止,並且只有在新進程需要等待5秒才能啓動之後...謝謝 – user1202434

回答

3

你有幾種選擇:

  1. 修改正在啓動的過程中,把延遲出現。你甚至可以等待「父母已經結束」而不是固定的時間。
  2. Windows內置的計劃任務
  3. 使用睡眠命令,然後批處理文件運行程序
+0

不幸的是,我不認爲一個計劃任務將取決於此。 5秒鐘等待太久; IIRC任務調度程序具有一分鐘的粒度。 – cHao

+0

@cHao:我不知道實際的精度,但API接受秒的粒度:http://msdn.microsoft.com/en-us/library/windows/desktop/aa383967(v=vs.85) .aspx –

+0

嘿Ben ....你的意思是「父母已經結束了」是否有一件事我可以掛鉤? – user1202434

4

如果第一個進程創建第三個節目是什麼。第一個程序會立即退出,而第三個程序會簡單地休眠5秒鐘,然後開始第二個程序。

+0

這是一個聰明的做法...但是編寫3個獨立的程序並不是真正的選擇。謝謝你。 – user1202434

+0

我得到的印象是,第一個程序退出的時間和第二個程序開始的時間必須有一定的時間間隔。如果第二個程序可以立即開始並等待您需要的時間,那麼Ben Voigt的答案中的選項1就是要走的路。在具有自動更新功能的程序中,這是一種常見的情況。更新程序必須由程序本身啓動,但更新程序無法在主程序退出之前開始覆蓋主程序。 – Exulted

0

您需要創建一個新的主題。在這個線程中你可以使用Thread.Sleep而不會阻塞你的程序。

public class MyThread 
{ 
    public static void DoIt() 
    { 
     Thread.Sleep(100); 
     // DO what you need here 
    } 
} 
override OnStartUp() 
{ 
    if(condition == true) 
    { 
     ThreadStart myThread = new MyThread(wt.DoIt); 
     Thread myThread = new Thread(myThread); 
     myThread.Start(); 
    } 
} 
+0

它確實阻止退出過程,這是問題中列出的要求。 –

1

您可以使用任務計劃程序API,並設置一個時間的任務,將未來5 seconds.Nice後啓動的應用程序管理wrraper:taskscheduler.codeplex.com

相關問題