CancelAsync实际上并没有终止您的线程或类似的东西。它向工作线程发送一条消息,指出应通过取消工作
BackgroundWorker.CancellationPending。在后台运行的DoWork委托必须定期检查此属性并自行处理取消。
棘手的部分是您的DoWork委托可能正在阻塞,这意味着您必须先完成对DataSource的工作,然后才能执行其他任何操作(例如检查CancellationPending)。您可能需要将实际工作移到另一个异步委托(或者可能更好的方法是,将工作提交到
ThreadPool),并进行主工作线程轮询,直到该内部工作线程触发等待状态,或者它检测到CancellationPending。
http://msdn.microsoft.com/zh-
CN/library/system.componentmodel.backgroundworker.cancelasync.aspx
http://www.preproject.com/KB/cpp/BackgroundWorker_Threads.aspx



