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場合はその値をチェックするだけです。 編集: プロセスが終了する前に、プロセスがすでに開始されているかどうかを確認する必要があります。プロセスがしばらく実行された後にのみログに記録するよりも、started変数を句に入れる必要があります。truebackgroundworkerif

    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 に答える