不需要删除线程对象吗?

时间:2014-09-22 11:00:58

标签: c#

我的项目中有一个搜索主题。 线程是在' 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()或其他函数? 我在这里写的第二个代码是正确的吗?

1 个答案:

答案 0 :(得分:4)

不,你不需要做任何事情。线程将在没有更多工作要做的时候完成。您可能需要考虑将其安排在线程池上执行,而不是每次都创建一个新线程。您可以直接执行此操作,也可以使用Task API通过任务并行库(TPL)执行此操作。或者,您可能希望使用BackgroundWorker,因为这样可以更轻松地向UI报告进度。 (根据您正在做的事情,您可能根本不需要其他线程 - 例如,如果您正在调用Web服务,则可以使用C#5中的异步工具来创建代码更简单的一次性更高效...)

但是,如果您直接使用Thread,则需要在每次启动时创建一个新的Thread对象,因为您可以& #39; t重用一个线程。

此外,除非您需要这是一个实例变量,否则您应该考虑将其作为局部变量。你什么时候访问除方法之外的线程?