Visual C# を使用してスレッドを作成する方法

文書翻訳 文書翻訳
文書番号: 815804 - 対象製品
すべて展開する | すべて折りたたむ

目次

概要

Microsoft Visual C# .NET または Microsoft Visual C# では、マルチスレッド アプリケーションを記述できます。この資料では、単純な Visual C# アプリケーションでスレッドの作成および管理を行う方法を説明します。

必要条件

必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack は次のとおりです。
  • Microsoft Windows 2000、Microsoft Windows XP、または Microsoft Windows Server 2003
  • Microsoft Visual C# .NET または Microsoft Visual C# 2005
この資料は、次のトピックについて詳しい知識のあるユーザーを対象としています。
  • Visual C# のプログラミング
  • Visual Studio .NET 統合開発環境 (IDE) または Visual Studio 2005 IDE

Visual C# マルチスレッド アプリケーションの作成

  1. Microsoft Visual Studio .NET、Microsoft Visual Studio 2005、または Microsoft Visual C# 2005 Express Edition を起動します。
  2. ThreadWinApp という名前の Visual C# Windows アプリケーションを新規作成します。
  3. フォームにボタン コントロールを 1 つ追加します。ボタンには既定で button1 という名前が付けられます。
  4. フォームにプログレス バー (ProgressBar) コンポーネントを 1 つ追加します。プログレス バーには既定で progressBar1 という名前が付けられます。
  5. フォームを右クリックし、[コードの表示] をクリックします。
  6. ファイルの先頭に次のステートメントを追加します。
    using System.Threading;
  7. Button1 に次の Click イベント ハンドラーを追加します。
    private void button1_Click(object sender, System.EventArgs e)
    {
    	MessageBox.Show("This is the main thread");
    }
  8. Form1 クラスに次の変数を追加します。
    private Thread trd;
    
  9. 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);
    	}
    }
    注: これは、スレッドの基になるコードです。このコードは、progressBar1 の値をランダムに増減して 100 ミリ秒待機する処理を繰り返す無限ループです。
  10. Form1 () 関数の InitializeComponent() の後ろに、以下のコードを追加します。このコードでは、新しいスレッドを作成し、作成したスレッドをバックグラウンド スレッドに設定した後、スレッドを開始します。
    private void Form1_Load(object sender, System.EventArgs e)
    {
    	Thread trd = new Thread(new ThreadStart(this.ThreadTask));
    	trd.IsBackground = true;
    	trd.Start();
    }

動作の検証

  1. アプリケーションをビルドして実行します。ProgressBar1 の値がランダムに変化します。これが、動作中の新しいスレッドに相当します。
  2. メイン スレッドが、ProgressBar1 の値を変更しているスレッドから独立していることを確認するには、フォーム上のボタンをクリックします。メッセージ ボックスに次のメッセージが表示されます。
    This is the main thread
入力せずに待機します。ProgressBar1 の値が変化し続けることを確認してください。

トラブルシューティング

より複雑なアプリケーションでは、共有変数にアクセスする場合は複数のスレッドを同期する必要があります。詳細については、Visual C# .NET のオンライン ヘルプ ドキュメントで、「lock ステートメント」および関連するトピックを参照してください。

関連情報

詳細については、Microsoft .NET Framework SDK のドキュメントを参照するか、次のマイクロソフト Web サイトにアクセスしてください。
Thread クラス
http://msdn.microsoft.com/ja-jp/library/system.threading.thread(vs.71).aspx
注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。

プロパティ

文書番号: 815804 - 最終更新日: 2014年1月27日 - リビジョン: 1.0
この資料は以下の製品について記述したものです。
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
キーワード:?
kbnamespace kbthreadsync kbthread kbhowtomaster KB815804
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com