如何创建线程
本文关键字:线程 创建 何创建 | 更新日期: 2024-07-23 02:01:43
当我点击按钮1时应该打印A s,但当我单击按钮2时需要停止线程1并需要启动线程2,这里有什么问题请帮助我
private void button1_Click(object sender, EventArgs e)
{
if (thread2.IsAlive)
{
thread2.Suspend();
}
thread1 = new Thread(threadOne);
thread1.Start();
}
private void button2_Click(object sender, EventArgs e)
{
if (thread1.IsAlive)
{
thread1.Suspend();
}
thread2 = new Thread(threadTwo);
thread2.Start();
}
private void threadOne() {
for (int i=0; i < 20; i++ )
{
Console.Write("A");
Thread.Sleep(500);
}
}
private void threadTwo()
{
for (int i = 0; i < 20; i++)
{
Console.Write("B");
Thread.Sleep(500);
}
}
1) 商业级软件中的大多数线程在应用程序的生命周期内永远不会终止——它们被写为具有阻塞调用的无限循环,等待来自其他线程或I/O操作的某种信号。
2) 连续创建/终止/销毁线程对象成本高昂,难以控制,调试困难,不可靠,通常会造成痛苦。
3) 如果您的多线程代码包含以下任何内容:
Suspend()
Resume(), (except in some thread ctors)
Join()
Abort()
IsAlive()
你可能应该再想想:)
我知道你只是在学习,但有时最好在漏洞变大之前修补一下:)
您正在Button Click事件中创建Thread的实例,因此检查threadX.IsAlive的if语句将抛出错误报告null引用异常
因此,请创建thread1&2加载
同时检查null
。使用Abort()
方法而不是Suspend(),因为每次都要创建一个新线程。
private void button1_Click(object sender, EventArgs e)
{
if (thread2!=null && thread2.IsAlive)
{
thread2.Abort();
}
thread1 = new Thread(threadOne);
thread1.Start();
}
private void button2_Click(object sender, EventArgs e)
{
if (thread1!=null && thread1.IsAlive)
{
thread1.Abort();
}
thread2 = new Thread(threadTwo);
thread2.Start();
}