Visual C# を使用してスレッドを作成する
マルチスレッド アプリケーションは、Microsoft Visual C# .NET または Visual C# で記述できます。 この記事では、単純な Visual C# アプリケーションでスレッドを作成および管理する方法について説明します。
元の製品バージョン: Visual C#
元の KB 番号: 815804
要件
次の一覧では、必要な推奨ハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、およびサービス パックの概要を示します。
- Windows または Windows Server
- Visual C# .NET または Visual C#
この記事では、次のトピックについて理解していることを前提としています。
- Visual C# プログラミング
- Visual Studio .NET 統合開発環境 (IDE) または Visual Studio IDE
この記事では、.NET Framework クラス ライブラリ名前空間 System.Threading
について説明します。
スレッドを含む Visual C# アプリケーションを作成する
Visual Studio .NET、Visual Studio、または Visual C# Express Edition を起動します。
ThreadWinApp という名前の新しい Visual C# Windows アプリケーション プロジェクトを作成します。
フォームに Button コントロールを追加します。 既定では、ボタンの名前は Button1 です。
ProgressBar コンポーネントをフォームに追加します。 既定では、進行状況バーの名前は ProgressBar1 です。
フォームを右クリックし、[コードの表示] クリック。
ファイルの先頭に次のステートメントを追加します。
using System.Threading;
Button1 の次の
button1_Click
イベント ハンドラーを追加します。private void button1_Click(object sender, System.EventArgs e) { MessageBox.Show("This is the main thread"); }
Form1
クラスに次の変数を追加します。private Thread trd;
次のメソッドを
Form1
クラスに追加します:private void ThreadTask () { int stp; int newval; Random rnd = new Random (); while (true) { stp = this.progressBar1.Step * rnd.Next (-1, 2); newval = this.progressBar1.Value + stp; if (newval > this.progressBar1.Maximum) newval = this.progressBar1.Maximum; else if (newval < this.progressBar1.Minimum) newval = this.progressBar1.Minimum; this.progressBar1.Value = newval; Thread.Sleep (100); } }
Note
これは、スレッドの基になるコードです。 このコードは、ProgressBar1 の値をランダムにインクリメントまたはデクリメントし、100 ミリ秒待ってから続行する無限ループです。
Form1 の次の
Form1_Load
イベント ハンドラーを追加します。 このコードでは、新しいスレッドを作成し、スレッドをバックグラウンド スレッドにしてから、スレッドを開始します。private void Form1_Load(object sender, System.EventArgs e) { Thread trd = new Thread(new ThreadStart(this.ThreadTask)); trd.IsBackground = true; trd.Start(); }
動作することを確認する
アプリケーションをビルドして実行します。 ProgressBar1 の値がランダムに変化していることに注意してください。 これは、操作中の新しいスレッドです。
メイン スレッドが ProgressBar1 の値を変更するスレッドから独立していることを示すには、フォームのボタンをクリックします。 次のエラー メッセージが表示されたダイアログ ボックスが表示されます。
これはメイン スレッドです
入力を待ちます。 ProgressBar1continues の値が変更されます。
トラブルシューティング
より複雑なアプリケーションでは、共有変数にアクセスするときに複数のスレッドを同期するようにしてください。 詳細については、Visual C# .NET オンライン ヘルプ ドキュメントの lock ステートメントと関連トピックを参照してください。
関連情報
詳細については、「 Thread クラス」を参照してください。