【问题标题】:Why GUI freezes when web browser navigates and loads?为什么当 Web 浏览器导航和加载时 GUI 冻结?
【发布时间】:2014-02-15 04:07:34
【问题描述】:

当网络浏览器导航和加载页面时,如何防止 GUI 冻结?

webBrowser1.Navigate("http://www.costco.com/");

例如,当它导航到该站点时,我的程序会稍微卡住,尤其是在加载网页时。我无法拖动和移动表格。选项卡控件中的选项卡按钮无法单击。我必须等待网页完全加载才能解冻。

我注意到独立 Internet Explorer 网络浏览器的行为方式并非如此。网页加载时不会冻结。

如何防止在网页加载时 UI 冻结?

【问题讨论】:

  • 你什么时候打电话给Navigate,在代码中的哪一点?
  • 按钮1_click下
  • 您是否尝试过使用async/await

标签: c# user-interface


【解决方案1】:

根据我的经验,Navigate 方法是一个非阻塞函数,它不会冻结 UI。

一个可能的原因是您在 UI 初始化之前调用它......您必须在加载表单后调用此函数:

bool form_loaded=false;

private void Navigate(String url)
{
if(form_laded)
    webBrowser1.Navigate(url);
}

private void Form1_Load(object sender, EventArgs e)
{
        form_loaded = true
}
.
.
.
void boo() 
{
   Navigate ( "http://stackoverflow.com" );
}

`

如果您想确保 UI 在导航期间不会冻结,您可以在每个 OnProgressChanged 事件中调用 DoEvents

private void webBrowser1_OnProgressChanged(WebBrowserProgressChangedEventArgs e)
{
    Application.DoEvents(); //update ui
}

【讨论】:

  • 感谢您的回答,但它不起作用。我通过添加另一个带有两个标签页的标签控件来测试您的代码。当 boo() 被执行时,我用鼠标快速单击了 tabpage1 和 tabpage 2 多次,并且在大约 1 到 2 秒内无法单击它们,因为在加载网页时,GUI 在导航过程中会稍微冻结。
  • 我认为问题出在您正在加载的网页上。它是否加载任何插件,如 java 或 flash-player ? (它们可能会导致这样的问题)
  • 使用OnProgressChanged 没有帮助。尤其是当页面正在等待非常繁重的 Ajax 请求时,会发生冻结。
猜你喜欢
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 2020-01-25
  • 2014-02-02
  • 1970-01-01
  • 2011-10-13
相关资源
最近更新 更多