不会';不需要删除线程对象
本文关键字:删除 线程 对象 不需要 不会 | 更新日期: 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作为实例变量,否则应考虑将其作为局部变量。除了在方法中,你什么时候访问过线程?