マルチスレッド                                

■ スレッド作成、書込み

 

     @Thread t1 = new Thread( )で Threadクラスのオブジェクトを作成する。   
  ・コンストラクタのパラメータにThreadStartクラスのオブジェクトを指定
  ・ThreadStartクラスのコンストラクタには、デリゲートInvokeメソッドを指定する
Aデリゲートを宣言する
B実際に実行するメソッドを作成する
CデリゲートInvokeメソッドでデリゲートに実際に実行するメソッドを実装する
 上記の4項目がスレッド生成・生成スレッドからの書込みをする場合必要となる

下記のプログラムは以下の仕様である。
  @ button1をクリックすると起動スレッドからlabel1に現在時刻を書き込む
  A button2をクリックすると生成した別スレッドからlabel1に現在時刻を書き込む

実行結果
   

          

   <プログラム例>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;


namespace WindowsFormsmultithread
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //デリゲート宣言する
        delegate void MyDelegate();

        void DisplayTime()
        {
            //現在の時刻を表示する
            label1.Text = DateTime.Now.ToString();
        }

        void DisplayTime2()
        {
            label1.Text = DateTime.Now.ToString();
        }

        public void myInvoke()  //デリゲートInvokeメソッド
        {
              //Invokeが必要な時はInvokeを使い、不必要の時は直接書き込む
            if (InvokeRequired)
                Invoke(new MyDelegate(DisplayTime2));   //デリゲートにメソッドを実装
            else
                DisplayTime();
        }




        private void button1_Click(object sender, EventArgs e) //Form1スレッドから表示
        {
                myInvoke();
        }

        private void button2_Click(object sender, EventArgs e) //第2スレッドから表示
        {
            Thread t1 = new Thread(new ThreadStart(myInvoke));//Threadクラスのインスタンスを作成する
            //★ コンストラクタのパラメータにThreadStartクラスのオブジェクトを指定する。
            //★ ThreadStartクラスのコンストラクタには、デリゲートInvokeメソッドを指定する
            t1.Start(); //スレッド実行
                        
        }

      
    }


}