backgroundworker - 关于后台工作线程中的 Thread.Sleep 的问题
问题描述
据我了解,.Net 中的 backgroundworker 运行在与 GUI 不同的威胁上。不推荐使用 Thread.Sleep,因为它会冻结 GUI。
现在,如果在 backgroundworker 的 DoWork中使用 Thread.Sleep ,GUI 会冻结还是这次 Sleep 只会让 BW 的线程休眠?还是不推荐?
(我试图通过 Thread.Sleep(1000) 在 DoWork 内暂停 1 秒似乎它不会干扰 GUI。有没有另一种方法可以在 BW 内暂停而不是 Thread.Sleep?等待任务需要同步方法,而 BW 不是:( )
解决方案
现在如果在 backgroundworker 的 DoWork 中使用 Thread.Sleep,GUI 会冻结还是这次 Sleep 只会让 BW 的线程休眠?
Thread.Sleep
与所有其他方法一样,在当前线程上运行。所以Thread.Sleep
导致当前线程休眠。如果它是从 BGW 调用的DoWork
,那么它将导致 BGW 的线程休眠。
是否有另一种方法可以在 BW 内部暂停而不是 Thread.Sleep?
不,但你可以用BackgroundWorker
完全Task.Run
替换,然后你可以用await Task.Delay
代替Thread.Sleep
。
推荐阅读
- jquery-ui - jQuery Ui 小部件菜单在悬停父项上显示所有子项
- javascript - Resize text to fit div
- sql - Remove function call from select statement
- php - 在多维数组中搜索并返回不支持变量的结果
- xamarin - Xamarin IOS 缺少视图控制器
- jquery - 如何在 CSS 中构建一个两列并排的简单手风琴布局?
- macos - 将默认 vim 设置为编辑器而不是 macvim
- mysql - MySQL 新手,我被困在 SAKILA 练习中
- javascript - 如果用户不接受 cookie,则禁用 HTTP 严格传输安全 (HSTS)
- botframework - 初始对话时出现 Microsoft Bot Framework v4 随机“未经授权”错误