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