私はC#(Visual Studio)で書かれたプログラムを持っています。これはトレイ上で動作します。 10分ごとに1つのアクションを実行します。 私は今のコードを次ています C#で非同期の一時停止を行うには?
while(true)
{
Thread.Sleep(10000);
// my stuff
}
をしかし、それは動作しません。それはプログラムをフリーズする。
私はC#(Visual Studio)で書かれたプログラムを持っています。これはトレイ上で動作します。 10分ごとに1つのアクションを実行します。 私は今のコードを次ています C#で非同期の一時停止を行うには?
while(true)
{
Thread.Sleep(10000);
// my stuff
}
をしかし、それは動作しません。それはプログラムをフリーズする。
タイマーオブジェクトを使用し、whileループを作成しないでください。
System.Timers.Timer _timer = new System.Timers.Timer();
_timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
//30 seconds
_timer.Interval = 30000;
_timer.Start();
private void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
//do your logic
}
System.Timers.Timerクラスではなく、System.Threading.Timerクラスを使用することをお勧めします。ジェフリー・リヒターのちょっとした話。 –
どういう違いがありますか? –
下記のリンクは、それらの違いを示しています http://social.msdn.microsoft.com/forums/en/US/csharpgeneral/thread/656f8b0f-77f7-42a7-a34c-0325ffef6c0a –
Thread.Sleepは、Xの時間のためにスリープ状態になっています。このスレッドがフロントエンドスレッド(メッセージの処理を担当するスレッド)である場合、スレッドを再び起動してメッセージを処理するまで、イベントを処理するメッセージや再描画メッセージはハンドリングされないため、実際にはアプリケーションをフリーズします。
このロジックは10秒ごとにスケジュールする必要があります。
フォームにタイマーをドロップし、10秒ごとに実行するように指定します。 Tickイベント内で、カスタムアクションを呼び出します。
Thread.Sleepは現在のスレッドを「停止」します。スレッドが1つだけの場合、すべてが一時停止されます。
達成したいことは何ですか?
おそらく、あなたが第二のスレッド、または多分よりよい解決策は10分ごと
のアクションをトリガーするタイマーを必要とします。 Task.StartNew()またはThreadPool
さて、あなたは分ではなく10秒間スリープします。 'Sleep'メソッドはパラメータとして_milliseconds_の数をとります。だから、10分間寝たいなら 'Sleep(600000)'と書いてください。 –