0

プロセスが実行されているかどうかを確認するために、ポーリングタイマーを保持しています。これには次の簡単なコードがあります。

bool alreadyChecked = false; //check if the wait to check the second time is already over

**Timer_elapsed event**

Process sampleProcess[] = Process.GetProcessesByName("notepad");
if(sampleProcess.length > 0)
{
//Process is running
return;
}
else
{
//Process is not running, so do the following

//Wait for some time and check again (set alreadyChecked = true when the wait is over)
if (alreadyChecked){
//Run the process}
else{
//The process has started running while we were waiting
return;}
    }

イベント内に実装できないwaiting codeため、待機してからイベントを再度発生させることができます。(待機時間を実装しても、待機中にタイマーによって再び Timer_elapsed イベントが発生します。)

助言がありますか?

4

1 に答える 1

0

別のスレッドを作成し、sleepメソッドを使用する必要があります。BackgroundWorkerを使用するのが最適なオプションです。タイマースレッドを使用することもできます。

**BackgroundWorker_DoWork event**
int nTrials = 0; // this method will help you pick any number of trials before launching the applicaion
bool isRunning = false;
while((isRunning = Process.GetProcessesByName("notepad") == 0)  || nTrials < 2)
{
    Thread.Sleep(1000); // w8 1 second before queriying the process name
    nTrials++;
} 

if ( isRunning ) RunProcess();

メインスレッドでsleepメソッドを使用しないでください。使用すると、アプリケーションはスリープ時間中のメッセージの処理を停止します。

于 2012-05-29T05:07:52.663 に答える