Thread Count

RunA cnt=1
RunB cnt=1
RunA cnt=2
RunA cnt=3
RunB cnt=2
RunA cnt=4
RunA cnt=5
RunB cnt=3
RunA cnt=6
RunB cnt=4
RunA cnt=7
RunA cnt=8
RunB cnt=5
Thread で起動したタスクでカウントします。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. スレッドとはプロセスの実行単位で、通常のプログラムは1プロセス(シングルスレッド)で実行されます。
    先に説明した Thread では Console Mode を使っていますが、今回は Windows Mode でプログラムします。
    C++ Windows でも スレッドの基礎 を掲載しています。
  2. 自動生成を使って Form を作成 でプロジェクトを作成して下さい。
    スレッドを使うときは using で Threading を追加します。
    using System.Threading;
    
  3. Form1.cs にスレッドで起動するメソッドを定義します。
    RunA() は 300 ミリ秒間隔で、RunB() は 500 ミリ秒間隔でカウントするメソッドです。
            // 300 間隔でカウント
            void RunA()
            {   string str;
                for (int i = 1; i < 100; ++i)
                {
                    System.Threading.Thread.Sleep(300);
                    str = "RunA cnt=" + i;
                    Console.WriteLine(str);
                }
            }
            // 500 間隔でカウント
            void RunB()
            {   string str;
                for (int i = 1; i < 100; ++i)
                {
                    System.Threading.Thread.Sleep(500);
                    str = "RunB cnt=" + i;
                    Console.WriteLine(str);
                }
            }
    
  4. Form1 の Constructor から RunA, RunB を起動します。
    バックグラウンド・スレッドで起動すると、親が停止するとスレッドも停止します。
            public Form1()
            {
                InitializeComponent();
                Thread threadA = new Thread(new ThreadStart(RunA));
                threadA.IsBackground = true;    //バックグラウンド・スレッドとする
                threadA.Start();
                Thread threadB = new Thread(new ThreadStart(RunB));
                threadB.IsBackground = true;    //バックグラウンド・スレッドとする
                threadB.Start();
            }
    
  5. コンパイル&実行するとカウントした値が Console.WriteLine で出力ウインドウに印字されます。
    RunA() は 300 ミリ秒間隔、RunB() は 500 ミリ秒間隔なので、次のように印字されました。
    RunA cnt=1
    RunB cnt=1
    RunA cnt=2
    RunA cnt=3
    RunB cnt=2
    RunA cnt=4
    RunA cnt=5
    RunB cnt=3
    RunA cnt=6
    RunB cnt=4
    RunA cnt=7
    RunA cnt=8
    RunB cnt=5
    

[Next Chapter ↓] Thread Class
[Previous Chapter ↑] スレッドの中断

超初心者のプログラム入門(C# Frame Work)