2012-09-10 71 views
-8

我想創建一個程序,它不斷地檢查程序的列表,以及何時有一個我指定它關閉的程序。我想在程序運行指定的程序時關閉。但現在還沒有結束。C#連續程序檢查

我用這個代碼:

using System; 
using System.Diagnostics; 

class Program 
{ 
    public static void Main() 
    { 
     Process[] prs = Process.GetProcesses(); 
     while (true) 
     { 
      foreach (Process pr in prs) 
      { 
       if (pr.ProcessName == "GameRanger") 
       { 

        pr.Kill(); 

       } 
      } 
     } 
    } 
} 
+0

什麼是「definated」平均時間? –

+0

你的問題是什麼? – Tudor

+1

你的問題是什麼?你的代碼有問題嗎?如果是這樣,問題是什麼? – Jason

回答

0

,你可以創建一個Windows服務,這樣的邏輯來做到這一點。它會在Windows啓動時自動啓動,您不需要手動啓動。

使用循環更新進程集,否則您正在檢查相同的一組進程。

確保添加一個Thread.sleep代碼(有時) foreach循環之內,否則這將是處理器密集型的每一個循環

Process[] prs = Process.GetProcesses(); 
      while(true) 
      { 
       foreach (Process pr in prs) 
       { 
        if (pr.ProcessName == "GameRanger") 
        { 

         pr.Kill(); 

        } 
       Thread.Sleep(TimeYouLike); 
       prs = Process.GetProcesses();// **Update the process list** 
       } 
      } 
+0

Thread.Sleep的最小值是多少?因爲我寫了1,而且這只是在打開後只有1分鐘。它總是與所有時間。 – user1660595

+0

public static void Sleep( \t int millisecondsTimeout ) 以上是您在http://msdn.microsoft.com/en-us/library/d00bd51t.aspx找到的定義。這意味着最小值是1毫秒。 使用TimeSpan.FromMilliseconds(1) –

4

的問題是,你永遠不更新流程陣列。您需要在while循環中執行此操作。

+0

哦,它的確是這樣,這真是一個非常愚蠢的問題。謝謝。 – user1660595

1

您可以在單獨的線程中執行此過程。我建議你使用BackGroundWorkerTimer

代碼片段

private void StartWorker() 
    { 
     if (backgroundWorker1.IsBusy != true) 
     { 
      // Start the asynchronous operation. 
      backgroundWorker1.RunWorkerAsync(); 
     } 
    } 

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
    { 
     // place you code here 
    }