プログラム(スレッド)の実行を一定時間停止する - C#
プログラム(スレッド)の実行を一定時間停止するコードを紹介します。
概要
プログラムやスレッドの実行を一定時間呈させる場合には、
System.Threading.Thread
クラスの
Sleep()
メソッドを用います。
書式
System.Threading.Thread.Sleep([停止させる時間(ミリ秒)]);
サンプルプログラム
UI
下図のUIを作成します。TextBoxとButtonを配置します。TextBoxはMultilinesプロパティをtrueに設定し複数行のテキストボックスにします。
コード
下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SleepThread
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
for (int i=0; i<10; i++) {
System.Threading.Thread.Sleep(1000);
textBox1.Text += i.ToString() + "\r\n";
textBox1.Update();
}
}
}
}
解説
for (int i=0; i<10; i++) {
System.Threading.Thread.Sleep(1000);
textBox1.Text += i.ToString() + "\r\n";
textBox1.Update();
}
forループで10回ループします。ループ内で、Sleep(1000)を呼び出すことで、プログラムの処理を1秒停止します。停止からの再開後、テキストボックスにメッセージを追加します。
メッセージ追加後、すぐに次のループに入りプログラムが停止するため、textBox1.Update()メソッドを呼び出さないと、ループを抜けるまでテキストボックスを更新するタイミングがないため、ループブロック内の最後の行でTextBoxのUpdate()メソッドを呼び出し、明示的にテキストボックスを更新しています。
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[button1]をクリックします。約1秒ごとにテキストボックスに数値が追加されます。
9まで数値が表示されます。
注意
この実装方式ではメインスレッドをスリープさせるため、[button1]クリックから数値の"9"が画面に表示されるまでの間は、ウィンドウの操作(ドラッグ、リサイズ)やウィンドウコントロールの操作(ボタンのクリック、テキストボックスの操作)はできない状態になります。
そのほかのコード記述例
例1
System.Threading.Thread.Sleep(500); //0.5秒実行を停止します。
例2
public void exec()
{
//10秒実行を停止します。
System.Threading.Thread.Sleep(10000);
//無期限で実行を停止します。
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
//1時間実行を停止します。
TimeSpan ts = new TimeSpan(0,1,0,0,0);
System.Threading.Thread.Sleep(ts);
}
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用