不会';不需要删除线程对象

本文关键字:删除 线程 对象 不需要 不会 | 更新日期: 2023-09-27 18:23:57

我的项目中有一个搜索线程。线程是在"Form1()"函数中创建的:

objSearchThread = new Thread(this.Thread_Func);

当用户单击"搜索"按钮时,会调用Start()函数:

private void Button_Search_Click(object sender, EventArgs e)
{
    objSearchThread.Start();
}

第二次点击这个按钮,崩溃了!因为线程处于"已启动"状态。如果我更改我的按钮点击代码,我会添加"new"命令。它工作时没有错误或崩溃:

private void Button_Search_Click(object sender, EventArgs e)
{
    objSearchThread = new Thread(this.Thread_Func);
    objSearchThread.Start();
}

它不需要删除线程对象(objSearchThread)吗?当线程工作结束时,它需要调用Abort()或其他函数吗?我在这里写的第二个代码正确吗?

不会';不需要删除线程对象

不,您不需要做任何事情。当线程没有更多的工作要做时,它就会完成。但是,您可能需要考虑将它安排在线程池上执行,而不是每次都创建一个新线程。您可以直接这样做,也可以通过带有Task API的任务并行库(TPL)。或者,您可能希望使用BackgroundWorker,因为这样可以更容易地向UI报告进度。(根据你正在做的事情,你甚至可能根本不需要另一个线程——例如,如果你正在调用一个web服务,你可能可以使用C#5中的异步功能,一次使代码更简单更高效…)

但是,如果您直接使用Thread,则每次启动Thread对象时都需要创建一个新的对象,因为您不能重用线程。

此外,除非需要this作为实例变量,否则应考虑将其作为局部变量。除了在方法中,你什么时候访问过线程?