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

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

元の製品バージョン:  Visual C#
元の KB 番号:  815804

要件

以下に、推奨されるハードウェア、ソフトウェア、ネットワークインフラストラクチャ、および必要な service pack の概要を示します。

  • Windows または Windows Server
  • Visual C# .NET または Visual C#

この記事では、以下のトピックについて理解していることを前提としています。

  • Visual C# プログラミング
  • Visual Studio .NET 統合開発環境 (IDE) または Visual Studio IDE

この記事では、.NET Framework クラスライブラリ名前空間について説明し System.Threading ます。

スレッドを使用して Visual C# アプリケーションを作成する

  1. Visual Studio .NET、Visual Studio、または Visual C# Express Edition を起動します。

  2. Threadwinappという名前の新しい Visual C# Windows アプリケーションプロジェクトを作成します。

  3. ボタン コントロールをフォームに追加します。 既定では、ボタンにはButton1という名前が付けられます。

  4. フォームに ProgressBar コンポーネントを追加します。 既定では、進行状況バーにはProgressBar1という名前が付けられます。

  5. フォームを右クリックし、[コードの表示] をクリックします。

  6. 次のステートメントをファイルの先頭に追加します。

    using System.Threading;
    
  7. Button1 の次のイベントハンドラーを追加し 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_LoadForm1 に次のイベントハンドラーを追加します。 このコードによって、新しいスレッドが作成され、スレッドがバックグラウンドスレッドになり、スレッドが開始されます。

    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 の値を変更するスレッドとは無関係であることを示すために、フォーム上のボタンをクリックします。 次のエラーメッセージが表示されるダイアログボックスが表示されます。

    これはメインスレッドです。

入力を待機します。 ProgressBar1continues の値を変更することに注意してください。

トラブルシューティング

より複雑なアプリケーションでは、共有変数にアクセスするときに、複数のスレッドを同期するようにしてください。 詳細については、Visual C# .NET online ヘルプドキュメントの lock ステートメントと関連トピックを参照してください。

関連情報

詳細については、「 Thread Class」を参照してください。