1

こんにちは、これまでコマンドで「コマンドプロンプト」を実行する小さなアプリケーションを作成しました。スレッドスリープを使用した簡単なメソッドを作成しました

public static string Executecmd(string command, int sleepSec) {
    try {
        string result = null;
        System.Threading.Thread objThread = new System.Threading.Thread(delegate() {
            result = ExecuteCommandSync(command);
        });
        objThread.IsBackground = true;
        objThread.Start();
        while (objThread.IsAlive == true) {
            System.Threading.Thread.Sleep(sleepSec * 1000);
            objThread.Abort();
        }
        return result;
    }
    catch (Exception x) {
        Console.WriteLine(x.Message + "\n" + x);
        return null;
    }
}

それは正常に動作しますが、実行されたコマンドが終了しても、スレッドのスリープが完了するまでスリープ状態のままになるため、私の質問は、それを実行して5秒間スリープし、完了した場合は停止するメソッドを作成する方法です。それ以外の場合は5秒待ってから中止します

4

2 に答える 2

3

タイムスパンでThread.Joinを使用します。

    System.Threading.Thread objThread = new System.Threading.Thread(delegate() {
        result = ExecuteCommandSync(command);
    });
    objThread.IsBackground = true;
    objThread.Start();

    //Waits here for "sleepSec" seconds or until the thread finishes, whichever is shorter.
    if(objThread.Join(new TimeSpan.FromSeconds(sleepSec)) == false)
    {
        //Only executes this code of the thread did not finish before the timeout.
        objThread.Abort();
    }
于 2012-10-05T21:08:34.977 に答える
0

この目的でWaitHandle.WaitOne(TimeSpan)を使用できます。

于 2012-10-05T21:06:25.833 に答える