C#中线程与窗体交互的多线程编程实例2014-10-13

代码:
public partial class Form1 : Form{//声明线程数组Thread[] workThreads = new Thread[10]; public Form1(){InitializeComponent();} //此委托允许异步的调用为Listbox添加Itemdelegate void AddItemCallback(string text); //这种方法演示如何在线程安全的模式下调用Windows窗体上的控件。private void AddItem(string text){if (this.listBox1.InvokeRequired){AddItemCallback d = new AddItemCallback(AddItem);this.Invoke(d, new object[] { text });}else{this.listBox1.Items.Add(text);}} //数据采集方法public void DataGet(){while (true){AddItem("ok");Thread.Sleep(1000);}//如果此方法退出了,那么这个线程也就退出了} /// <summary>/// 启动线程/// </summary>/// URL:http://www.bianceng.cn/Programming/csharp/201410/45776.htm/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, EventArgs e){//循环创建并启动线程执行for (int i = 0; i < workThreads.Length; i++){if (workThreads[i] == null){//如果线程不存在,则创建workThreads[i] = new Thread(new ThreadStart(DataGet));workThreads[i].Name = i.ToString();workThreads[i].Start();}else{//已经存在,如果没有运行,则启动if (workThreads[i].ThreadState == ThreadState.Aborted || workThreads[i].ThreadState == ThreadState.Stopped){workThreads[i] = new Thread(new ThreadStart(DataGet));workThreads[i].Name = i.ToString();workThreads[i].Start();}else{workThreads[i].Start();}}}} /// <summary>/// 停止线程/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_Click(object sender, EventArgs e){//循环停止线程执行for (int i = 0; i < workThreads.Length; i++){//如果线程存在,并且状态不是停止也不是终止的,则终止该线程if (workThreads[i] != null && workThreads[i].ThreadState != ThreadState.Stopped && workThreads[i].ThreadState != ThreadState.Aborted){workThreads[i].Abort();}}}}
源码下载:http://download.csdn.net/detail/testcs_dn/7618881