您的位置:首页 > 编程语言 > C#

C#多线程编程实例 线程与窗体交互

2015-09-28 10:27 531 查看


代码:

public partial class Form1 : Form

{

//声明线程数组

Thread[] workThreads = new Thread[10];

public Form1()

{

InitializeComponent();

}

//此委托允许异步的调用为Listbox添加Item

delegate 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>

/// <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();

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: