【发布时间】:2011-03-02 23:08:35
【问题描述】:
我正在使用BackgroundWorker 通过在循环中调用WebClient.DownloadString 来下载一些网站。我希望用户在下载内容的过程中取消选项,所以每当我发现CancellationPending 在循环中间打开时,我都会打电话给CancelAsync。
但现在我注意到函数DownloadString 有时会冻结,所以我决定改用DownloadStringAsync(所有这些都在使用BackgroundWorker 创建的另一个线程中)。而且由于我不想通过在调用DownloadStringAsync 后退出循环和函数来重写我的整个代码,所以我在调用它之后立即创建了一个while 循环,它只检查我打开的变量bool Stop当DownloadStringCompleted 事件处理程序被调用或用户请求取消操作时为真。
现在,奇怪的是它在调试版本上运行良好;但是在第一个版本中,程序在 while 循环中冻结,就像它是主线程一样。
【问题讨论】:
标签: c# backgroundworker cancellation request-cancelling