如何取消异步调用?.NET应用程序管理器似乎不支持此操作。
我的代码中有以下循环,它在ThreadPool上产生多个线程。当我单击UI上的按钮时,我希望这些线程(或异步调用)结束。
foreach (var sku in skus)
{
loadSku.BeginInvoke(...
}
除了创建一个全局的“取消标志”并使用异步方法来查找它之外,还有其他更好的解决方案吗?
发布于 2009-11-13 22:00:39
如果您正在寻找"TerminateAsnyc“方法,您将找不到它。因此,在使用Control.BeginInvoke/EndInvoke时,可能没有优雅的方法。因此,我会将布尔标志放在UI线程上,并让异步执行的委托在执行时定期检查该标志。
但是,您可以使用后台工作线程签入。
发布于 2009-11-13 22:04:49
当然还有其他的解决方案,尽管我不知道我是否会称它们为“优雅”。
您可以在线程上调用Abort或Interrupt,但这些可能会产生一些负面影响。就我个人而言,对于这样的事情,如果可能的话,我更喜欢使用BackgroundWorker。它有一个取消功能,但它类似于您提到的-类中的一个布尔标志,您必须在执行代码中定期检查它(至少它不是一个全局标志)。This post on stopping threads in .NET有点老了,但它克服了我上面提到的其他选项的一些缺陷。
https://stackoverflow.com/questions/1729346
复制相似问题