首页 > 解决方案 > 关于后台工作线程中的 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

解决方案


现在如果在 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


推荐阅读