C#学习教程:中止线程以Delegate.BeginInvoke开头我将此用作最后的手段,因为某些I/O函数(例如,在不存在的网络共享上使用File.Exists)会阻塞大量时间并且不允许您指定超时。问题:是否可以使用Delegate.BeginInvoke(如在Thread.Abort中)中止工作线程,还是我必须自己执行线程化?唯一的方法是让委托将Thread.CurrentThread传递给主线程。但是,您不应该这样做;终止ThreadPool线程不是一个好主意。(除非你取消catch块中的abort)你必须使用你自己的线程。在使用Delegate.BeginInvoke调用的委托中发生的线程方法上调用Abort是危险的。Delegate.BeginInvoke在ThreadPool线程上触发委托。通过Abort终止ThreadPool线程可能会导致出现非常奇怪的错误,因为ThreadPool不打算处理这种情况。话虽如此,这也是完全没有必要的。如果您要中止,您应该始终能够从ThreadPool线程中检测到,并适当地返回。如果ThreadPool线程被阻塞,那也不会成为问题,因为它不会阻塞您的主线程。最好在阻塞调用之后进行检查(即:在File.Exists之后),如果您想在此时中止,则返回。以上就是C#学习教程:暂停Delegate开头的线程共享的所有内容。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
