for (i = 0; i <= 21; i++){ webB.Navigate(URL);}
webB是一个webbrowser控件,我是一个int.
我想等待浏览器完成导航.
然而,我找到了this:
>我不想使用任何API或插件
>我不能使用另一个voID函数,如this answer所示
有没有办法在for循环中等待?
解决方法 假设您在WinFroms应用程序中托管Webbrowser,您可以使用async / await模式轻松高效地循环执行.试试这个:async Task DoNavigationAsync(){ taskcompletionsource<bool> tcsNavigation = null; taskcompletionsource<bool> tcsdocument = null; this.WB.Navigated += (s,e) => { if (tcsNavigation.Task.IsCompleted) return; tcsNavigation.SetResult(true); }; this.WB.documentCompleted += (s,e) => { if (this.WB.ReadyState != WebbrowserReadyState.Complete) return; if (tcsdocument.Task.IsCompleted) return; tcsdocument.SetResult(true); }; for (var i = 0; i <= 21; i++) { tcsNavigation = new taskcompletionsource<bool>(); tcsdocument = new taskcompletionsource<bool>(); this.WB.Navigate("http://www.example.com?i=" + i.ToString()); await tcsNavigation.Task; DeBUG.Print("Navigated: {0}",this.WB.document.URL); // navigation completed,but the document may still be loading await tcsdocument.Task; DeBUG.Print("Loaded: {0}",this.WB.documentText); // the document has been fully loaded,you can access DOM here }}
现在,了解DoNavigationAsync以异步方式执行非常重要.这是你如何从Form_Load调用它并处理它的完成:
voID Form_Load(object sender,EventArgs e){ var task = DoNavigationAsync(); task.ContinueWith((t) => { MessageBox.Show("Navigation done!"); },TaskScheduler.FromCurrentSynchronizationContext());}
我已经回答了类似的问题here.
总结以上是内存溢出为你收集整理的c# – 我可以等待webbrowser使用for循环完成导航吗?全部内容,希望文章能够帮你解决c# – 我可以等待webbrowser使用for循环完成导航吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)