C# 取消线程内的BackgroundWorker

C# 取消线程内的BackgroundWorker,c#,backgroundworker,request-cancelling,C#,Backgroundworker,Request Cancelling,我有一个使用BackgroundWorker和C#的长时间运行的多步骤流程。在进入下一步之前,我需要确保每个步骤都已成功完成。我看到过很多关于让BackgroundWorker捕获错误并单击Cancel按钮取消的引用,但我想自己检查错误,然后优雅地结束该过程。我是像有人单击取消按钮一样对待它,还是有其他方法?给定一个后台工作人员bgWrk: 您可以设置bgWrk.Cancel=true发生错误时。这样做具有以下效果: 然后,这会将CancellationPending标志切换为true,您可以定

我有一个使用BackgroundWorker和C#的长时间运行的多步骤流程。在进入下一步之前,我需要确保每个步骤都已成功完成。我看到过很多关于让BackgroundWorker捕获错误并单击Cancel按钮取消的引用,但我想自己检查错误,然后优雅地结束该过程。我是像有人单击取消按钮一样对待它,还是有其他方法?

给定一个
后台工作人员
bgWrk:

您可以设置
bgWrk.Cancel=true发生错误时。这样做具有以下效果:

然后,这会将
CancellationPending
标志切换为true,您可以定期检查后台工作程序,然后相应地取消。据我所知,这将被视为做这件事的“最佳实践”


如果设置了
CancellationPending
标志,并且基本上等待调用者取消,则可以确保不再运行代码。它应该可以正常工作。

当您说“我想自己检查错误”时,您的意思是希望BackgroundWorker线程检查错误本身吗?如果出现错误,则取消后台任务?否,例如,假设数据库中缺少完成这些步骤所需的信息。它不会抛出错误,但如果允许它继续下去,可能会导致问题。感谢您确认我认为需要执行的操作。我只是不想在不考虑是否有其他(或更好)方法的情况下做出这样的假设。此外,DoWork应该设置Args.cancelled=true以将取消状态传递给已完成的事件。这不应该是bgWrk.CancelAsync()?我在.NET 3.5中没有bgWrk.Cancel。取消由DoWork事件持有,CancelAsync()通过对象(该对象正在进行监视以执行取消本身)(和+1@Henk)