我可以通过C#中的代理取消方法吗?

如果我在“处理”动画屏幕中按取消,我想立即停止一个方法。 我通过代理使用异步调用。 是否可以通过委托立即停止执行该方法?

谢谢 :)

不 – 至少,不干净。 (我不包括Thread.Abort作为“干净”。)你应该做的是有一种机制告诉代表你正试图取消它。 然后,您的代表需要偶尔检查取消标志并做出相应的反应。

Parallel Extensions在整个地方内置了取消(特别是取消令牌,只允许适当的代码片段取消任务)。 据我所知,它仍然是合作的。 强制取消将永远存在腐败状态的风险。

您可以使用System.ComponentModel.BackgroundWorker 。 它支持取消,因此您不必编写样板代码。 客户端代码可以简单地调用CancelAsyn方法,您可以在有意义的时间和地点检查代码中的CancellationPending属性,以确定客户端是否已取消操作并进行挽救。

正如乔恩已经说过的那样,你不能告诉一个主题:“请立即停止”并期望线程服从。 Thread.Abort不会告诉它停止,只需“拔掉”它。 🙂

我过去所做的是在线程的代码中添加一系列“if(wehavetostop)”,如果用户按下“取消”,我就把wehavetostop == true。

它不是太优雅,在某些情况下,“if”检查可能“很难”,特别是如果你的线程运行一个你不能分割的“长”操作。

如果您正在尝试建立网络连接(并且需要花费时间)并且您确实认为线程的“exception”终止不会导致任何损坏状态,您可以使用它,但请记住您不能信任该状态涉及该线程的事情。