我正在处理的项目中有以下代码片段:
public void Start()
{
Thread t = new Thread(NotifyIfNecessary);
Threads.Add(t);
t.Start();
t.Abort());
}
我想要的是线程't'应该执行NotifyIfNecessary方法并且只在方法完成执行后才中止。在我当前的代码中,t.Abort()被过早调用。
答案 0 :(得分:6)
这是因为您正在创建一个新线程并启动它,然后通过调用Thread.Abort()
方法立即从您刚刚创建它的线程中删除它。你不需要这样做; NotifyIfNecessary
完成执行后,您的线程将完成。只需删除行t.Abort();
,您的代码就可以正常运行。
答案 1 :(得分:4)
您不应该首先调用abort,因为abort仅适用于失败的用户代码(在单独的appdomain中运行)。在您的情况下,只需允许NotifyIfNecessary运行完成(即不要调用abort)。完成。
但也许你真正想做的是,在NotifyIfNecessary完成之前,你的主线程不会继续。如果是这种情况,则调用Thread“Join”。
答案 2 :(得分:3)
您不需要调用Abort,因为当NotifyIfNecessary结束时,该线程将自动停止。
答案 3 :(得分:3)
如果您希望NotifyIfNecessary完成,请不要中止该线程。如果您希望该函数仅在完成NotifyIfNecessary之后继续使用join,或者不在另一个线程中调用该函数。
答案 4 :(得分:3)
我认为不需要拨打Abort()
。一旦NotifyIsNeccessary
完成,线程就会完成。您是否希望在Start()
结束时等待线程完成?