1

私はdo/while次のようなものを持っています:

do {

  //1.look for a report

  //2.either use interops to run an xl macro report or run a batch file report or run vbs file report

  //3.then sleep/pause program for 150seconds 

} while (look for next report to run)

これはすべてConsoleアプリケーションを伴うものです。

150秒の一時停止/スリープを作成するにはどうすればよいですか?Thread.Sleepステップ2にはさまざまなプロセスの実行が含まれる可能性があり、スレッドセーフではないため、単に使用するのが面倒になるのではないかと少し心配しています。


どういうわけか、この種のコードを構造に組み込む必要がありますか?つまり、ステップ1と2をCallMeBackメソッドに入れますか?

static void Main(string[] args) {
    var t = new System.Timers.Timer(1000);
    t.Elapsed += (s, e) => CallMeBack();
    t.Start();

    Console.ReadLine();
}
public static void CallMeBack() {

    //1.look for a report
    //2.either use interops to run an xl macro report or run a batch file report or run vbs file report

    Console.WriteLine("Doing some consuming time work using sleep");
}

(上記はここから抜粋したものです)

4

2 に答える 2

1

これはミリ秒単位で機能し、中断された場合にキャッチできますが、通常は発生しません。

System.Threading.Thread.Sleep(150000);

編集:

もう1つのオプションは、他の処理が完了するまで待つだけの場合、または150秒ごとに1回実行する場合は、joinを使用することです。質問する前に、何が欲しいかを知っていることを確認してください。

スレッドセーフな一時停止が必要な場合は、次を使用します。

task.Wait(150000);
于 2012-11-20T17:52:19.443 に答える
1

ループの代わりにタイマーを使用します。手順1と2は、指定した間隔で発生するイベント内で実行されます。

半定期的なタイマーが必要な場合は、Timerオブジェクトを自動リセットしないように設定し、代わりにイベントの最後に手動で有効にすることができます。

于 2012-11-20T17:54:25.187 に答える