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# アプリケーションを作成する

  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 の次 Form1_Load のイベント ハンドラーを追加します。 このコードでは、新しいスレッドを作成し、スレッドをバックグラウンド スレッドにしてから、スレッドを開始します。

    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 オンライン ヘルプ ドキュメントの lock ステートメントと関連トピックを参照してください。

関連情報

詳細については、「 スレッド クラス」を参照してください。