2012-09-10 53 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 
    }