滴水穿石 C#中多線程 委托的使用
下面是一個涉及線程和委托綜合的小例子。
using System;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;//使用多線程的聲明(準確的說是要在main主線程中建立新的線程時要進行的引
public partial class Form1 : Form
public static int Num = 0;
Thread thread1; //在主線程中聲明線程1
Thread thread2; //在主線程中聲明線程2
daililist list1;//委托實例化,即建立委托對應的事件
InitializeComponent();
list1 = new daililist(updatelist);//委托處理的方法,這裏updatelist是一個方法,這個句子的意思是把updatelist這個方法交給了list1這個委托實例
thread1 = new Thread(numadd );
thread1.Start();
thread2.Start();
public void updatelist()
listBox1.Items.Add (Num) ;
public void numadd()
Num ++;
listBox1.Invoke(list1);//這是自己建立的線程要調用的方法,但是listbox1是main主線程建立的控件,自定義的線程無法直接訪問,上面已經定義了委托,此處應用listbox1的invoke
//到此我們理一下思路,建立線程thread1、thread2,這兩個線程都指向了numadd這個方法,首先都執行Num++,然後執行listBox1.Invoke(list1),意思是說將要對listbox1操作,
private void button2_Click(object sender, EventArgs e)
thread1.Join();
thread2.Abort();
}
}
}
using System.Collections.Generic; using System.Data; using System.Linq; 用說明) namespace mytest { { delegate void daililist();//主線程之外的線程要調用main線程中建立的控件,需要使用委托的方式,此處是委托的定義 public Form1() { } private void button1_Click(object sender, EventArgs e) { thread2 = new Thread(numadd); } { } { //方法把所有對listbox1的操作都交給委托list1去處理。 //但是具體操作在list1這個委托當中,然後這個委托指向了updatelist並執行,至此thread1、thread2都完成了對listbox1的操作! } { thread1.Abort(); thread2.Join();
滴水穿石 C#中多線程 委托的使用