2013-03-11 93 views
1

在这个函数中,我正在检查游戏是否运行。如果进程正在运行,我如何让timer2只运行一次函数?

如果它正在运行,我开始backgroundworker

然后在timer2我继续检查过程是否正在运行,直到我退出游戏。

但我不希望它保持,如果它的运行检查与否,所有一遍,重新开始backgroundworker ...

所以在一面我想要timer2将运行功能的所有时间直到我退出游戏为止,我不希望它始终开始backgroundworker

private void wichProcessIsrun() 
{ 
    Process[] pname = Process.GetProcessesByName("BFBC2Game"); 
    if (pname.Length == 0) 
    { 
     Logger.Write("Battlefield Bad Company 2 Ended"); 
    } 
    else 
    { 
     Logger.Write("Battlefield Bad Company 2 Started"); 
     backgroundWorker1.RunWorkerAsync(); 
    } 
} 

private void timer2_Tick(object sender, EventArgs e) 
{ 
    wichProcessIsrun(); 
} 
+0

我可以检查背景工作者是否忙碌,但它会一直检查它,并且如果游戏结束或开始多次,它会一直写入日志文件。我需要一切都要做一次,但也要保持观看的过程,直到我退出比赛。 – user2065612 2013-03-11 22:04:18

回答

2

你应该有一个bool变量,当您启动过程后,检查过程中,只需要检查它的价值,如果它是true比你不应该开始backgroundworker应该设置。 编辑: 您应该检查过程是否已经结束之前已经开始。您应该将已启动的变量放在if子句中,而不是仅在该过程运行一段时间后才会记录。

bool started = false; 
    private void wichProcessIsrun() 
    { 
     Process[] pname = Process.GetProcessesByName("BFBC2Game"); 
     if (pname.Length == 0 && started) 
     { 
      Logger.Write("Battlefield Bad Company 2 Ended"); 
      started = false; 
     } 
     else if(pname.Length != 0 && !started) 
     { 
      Logger.Write("Battlefield Bad Company 2 Started"); 
      backgroundWorker1.RunWorkerAsync(); 
      started = true; 
     } 
    } 

    private void timer2_Tick(object sender, EventArgs e) 
    { 
     wichProcessIsrun(); 
    } 
+0

尼古拉这是伟大的另一件事时,即时通讯运行应用程序和游戏没有运行,所以它一直在写入日志文件,因为定时器2每秒都在工作,游戏结束。但是游戏并没有结束,因为它还没有运行。我如何才能确认游戏是否结束(退出游戏时退出)? – user2065612 2013-03-11 22:07:28

+0

现在,它正在检查游戏是否不作为进程运行,因此它会在游戏结束时一直写入日志文件,我需要以某种方式检查是否我退出游戏,然后如果进程不在列表中,但是在之前的名单中意味着我退出了比赛。 – user2065612 2013-03-11 22:09:13

+0

谢谢。尼古拉。 – user2065612 2013-03-11 22:09:38