1

在这个函数中,我正在检查游戏是否正在运行。

如果它正在运行,我正在启动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();
}
4

1 回答 1

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();
    }
于 2013-03-11T22:04:17.007 回答