【发布时间】:2017-04-17 23:05:52
【问题描述】:
我有一个 wpf 程序,我想在其中添加一个 WebBrowser 控件
我搜索如何检查 WebBrowser 是否成功加载页面,代码如下:
private async Task PageLoad(int TimeOut)
{
TaskCompletionSource<bool> PageLoaded = null;
PageLoaded = new TaskCompletionSource<bool>();
int TimeElapsed = 0;
webBrowser.LoadCompleted += (s, e) =>
{
if (webBrowser.ReadyState != webBrowser.Complete) return;
if (webBrowser.Task.IsCompleted) return;
PageLoaded.SetResult(true);
};
while (PageLoaded.Task.Status != TaskStatus.RanToCompletion)
{
//interval of 10 ms worked good for me
await Task.Delay(10);
TimeElapsed++;
if (TimeElapsed >= TimeOut * 100)
{
//This prevents your method or thread from waiting forever
PageLoaded.TrySetResult(true);
}
}
}
但是为什么它在 wpf 上不起作用。如何转换?
我检查了它,ReadyState Complete 和 Task.IsCompleted 在 wpf 中没有这样的属性。 wpf的代码是什么?
【问题讨论】:
-
检查网页是否已加载是一件可疑的事情。 Web 浏览器控件和 IE 都允许您连接到 document.complete 事件。但当然问题是许多 javascript 框架也只有在文档完成加载后才开始加载内容。因此,您可以触发 document.complete 事件,但仍可能有正在运行的脚本动态添加更多网页。
标签: c# wpf webbrowser-control