我的项目中有一个搜索主题。 线程是在' Form1()'中创建的。功能:
objSearchThread = new Thread(this.Thread_Func);
当用户点击“搜索”时按钮,调用Start()函数:
private void Button_Search_Click(object sender, EventArgs e)
{
objSearchThread.Start();
}
第二次点击此按钮,崩溃了!因为线程是“开始”的州。 如果我改变我的按钮点击代码,我添加新的'命令。它没有错误或崩溃:
private void Button_Search_Click(object sender, EventArgs e)
{
objSearchThread = new Thread(this.Thread_Func);
objSearchThread.Start();
}
不需要删除线程对象(objSearchThread)吗? 当线程工作结束时,是否需要调用Abort()或其他函数? 我在这里写的第二个代码是正确的吗?
答案 0 :(得分:4)
不,你不需要做任何事情。线程将在没有更多工作要做的时候完成。您可能需要考虑将其安排在线程池上执行,而不是每次都创建一个新线程。您可以直接执行此操作,也可以使用Task
API通过任务并行库(TPL)执行此操作。或者,您可能希望使用BackgroundWorker
,因为这样可以更轻松地向UI报告进度。 (根据您正在做的事情,您可能根本不需要其他线程 - 例如,如果您正在调用Web服务,则可以使用C#5中的异步工具来创建代码更简单的和一次性更高效...)
但是,如果您直接使用Thread
,则做需要在每次启动时创建一个新的Thread
对象,因为您可以& #39; t重用一个线程。
此外,除非您需要这是一个实例变量,否则您应该考虑将其作为局部变量。你什么时候访问除方法之外的线程?