令我非常不满的是,我需要在我的一个应用程序中使用 WebBrowser 控件。
我还需要做的一件事是等待元素变为可见/类更改/等,这在DocumentCompleted
事件触发后发生,在我的情况下使事件接近无用。
所以目前我有类似...
while (webBrowser.Document?.GetElementById("id")?.GetAttribute("classname") != "class")
{
Application.DoEvents();
Thread.Sleep(1);
}
现在我已经在多个地方读到了DoEvents()
邪恶并且可能导致很多问题的地方,所以我考虑将其替换Task.Delay()
为:
while (webBrowser.Document?.GetElementById("id")?.GetAttribute("classname") != "class")
{
await Task.Delay(10);
}
Thread.Sleep()
所以我的问题是,除了将阻塞事件 1ms 并且在上面的示例中设置了更大的延迟这一明显事实Task.Delay()
之外,执行这两种方法之间的实际区别是什么,哪个更好,为什么?
PS:请坚持这个问题,虽然我不一定介意关于如何WebBrowser
通过使用其他东西来解决控制问题本身的其他想法(想到js注入),这不是回答的地方,这个问题是关于这两位代码有何不同,哪些会被认为更好。