C#でスレッドを作成して実行するコードと実行結果

C#でスレッドを作成し実行するマルチスレッドのプログラムのコードと実行結果を紹介します。

概要

C#でスレッド処理を実行する場合には、Threadクラスを利用します。
Threadクラスのインスタンスを作成し、作成時のコンストラクタに実行したい処理の ThreadStart デリゲートを与えます。 作成されたThreadクラスのインスタンスオブジェクトのStart()メソッドを実行することでスレッドの処理が開始できます。
複数のスレッドを同時に実行することで、マルチスレッドが実現できます。

プログラム例1

UI

下図のUIを作成します。ボタンと複数行のテキストボックスを配置します。

C#でスレッドを作成して実行するコードと実行結果:画像1

コード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;

namespace ExecThread
{
  public partial class FormExecThread1 : Form
  {

    public FormExecThread1()
    {
      InitializeComponent();
    }

    private void Button1_Click(object sender, EventArgs e)
    {
      Thread t = new Thread(new ThreadStart(ThreadProc));
      t.Start();                                        //スレッド実行
      textBox1.Text += "End";
    }

    private void ThreadProc()
    {
      System.Threading.Thread.Sleep(10000);            //時間のかかる処理
    }

  }
}

解説

下記コードでスレッドを作成します。ThreadStartクラスのコンストラクタの引数にスレッド開始時の実行メソッドを与えます。

Thread t = new Thread(new ThreadStart(ThreadProc));

スレッドクラスのStartメソッドでスレッドを実行開始します。

t.Start();


スレッドは実行されますが、メインスレッドも並行して実行されるため、下記の行が実行されすぐにテキストボックスに"End"の文字が表示されます。

textBox1.Text += "End";

実行結果

上記のプログラムを実行します。下図のウィンドウが表示されます。[button1]をクリックします。
C#でスレッドを作成して実行するコードと実行結果:画像2

スレッドが作成され実行されます。サブスレッドでは10秒停止する処理が実行されますが、メインスレッドとは独立して動作するため、メインスレッドはすぐに制御が戻り"End"の文字列がテキストボックスに表示されます。

C#でスレッドを作成して実行するコードと実行結果:画像3

プログラム例2

先の例の通り、スレッドの処理は別クラスにする必要はありませんが、コードを見やすくするため、別のクラスに記述することが多いです。

コード

FormExecThread2.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;

namespace ExecThread
{
  public partial class FormExecThread2 : Form
  {
    public FormExecThread2()
    {
      InitializeComponent();
    }

    private void Button1_Click(object sender, EventArgs e)
    {
      MyThread m = new MyThread();                      //スレッドクラスの作成
      Thread t = new Thread(new ThreadStart(m.exec));
      t.Start();                                        //スレッド実行
      textBox1.Text += "End";
    }
  }
}

MyThread.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ThreadCheck
{
  class MyThread
  {
    public void exec()
    {
      System.Threading.Thread.Sleep(10000);           //時間のかかる処理
    }
  }
}

解説

下記コードでスレッドの処理が実装されているクラスを作成します。

MyThread m = new MyThread();

下記コードでスレッドを作成します。 ThreadStartクラスのコンストラクタの引数にスレッド開始時の実行関数を与えます。

Thread t = new Thread(new ThreadStart(m.exec));


スレッドを実行します。

t.Start();

スレッドは実行されますが、メインスレッドも並行して実行されるため、下記の行が実行されすぐにテキストボックスに"End"の文字が表示されます。

textBox1.Text += "End";

実行結果

上記のプログラムを実行します。下図のウィンドウが表示されます。[button1]をクリックします。先の例と同様の結果になります。
C#でスレッドを作成して実行するコードと実行結果:画像4 C#でスレッドを作成して実行するコードと実行結果:画像5

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2010-05-28
Copyright © 1995–2025 iPentec all rights reserverd.