gpt4 book ai didi

c# - 如何暂停 BackgroundWorker?或者类似的东西

转载 作者:太空狗 更新时间:2023-10-29 19:43:19 25 4
gpt4 key购买 nike

我用的是 BackgroundWorker通过调用 WebClient.DownloadString 下载一些网站在一个循环内。我想让用户在下载东西的过程中取消选项,所以我调用CancelAsync每当我发现 CancellationPending在循环中间打开。

但现在我注意到函数 DownloadString有时会卡住,所以我决定使用 DownloadStringAsync相反(所有这些都在使用 BackgroundWorker 创建的另一个线程中)。而且由于我不想在调用 DownloadStringAsync 后不得不退出循环和函数来重写我的整个代码。 ,我在调用它之后立即创建了一个 while 循环,除了检查变量 bool Stop 什么都不做。我在 DownloadStringCompleted 时变为真事件处理程序被调用或当用户请求取消操作时。

现在,奇怪的是它在调试版本上运行良好;但是在第一个版本中,程序在 while 循环中卡住,就像它是主线程一样。

最佳答案

在我看来,您正在忙于等待 while 循环。您应该改用事件信号,例如。一个等待句柄。 Release模式下的忙等待循环很可能会耗尽您的所有 CPU,给人一种卡住的感觉。

在 DownloadStringCompleted 或用户取消下载时向 WaitHandle 发出信号。

检查 MSDN docs在 WaitHandle 类上。那里还有一个例子。

关于c# - 如何暂停 BackgroundWorker?或者类似的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3028021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com