【问题标题】:How to wait for some second before next line executed如何在下一行执行之前等待几秒钟
【发布时间】:2015-01-14 10:27:34
【问题描述】:

我想在网页完全加载到我的 Winforms WebControl 之后显示一个 MessageBox。

我用这段代码来延迟:

System.Threading.Thread.Sleep(4000);
Task.Delay(2000);  

这些都不起作用。问题是我有一个无限循环。

谁能给我一个解决方案或任何更好的选择(如果有的话)?

这是我的代码

private void btnGo_Click(object sender, EventArgs e)
{
    try
    {
        string WebPage = txtURL.Text.Trim();
        Webcntrl.Navigate(WebPage);   // Webcntrl is Name of  webcontrol in my  Windows Applications

        while (Webcntrl.ReadyState.ToString() != "Complete")
        {
            //System.Threading.Thread.Sleep(4000);
            //Task.Delay(2000);
        }
        MessageBox.Show("hI ! website loaded Sucessfully");
    }
    catch (Exception ex)
    {

    }
}

按照 Ahmed ilyas 的建议,我按以下方式修改了代码

 private void btnGo_Click(object sender, EventArgs e)
        {
            try
            {
                string WebPage = txtURL.Text.Trim();
                Webcntrl.Navigate(WebPage);   // Webcntrl is Name of  webcontrol in my  Windows Applications

                Webcntrl.DocumentCompleted +=new WebBrowserDocumentCompletedEventHandler(SiteLoaded);


            }
            catch (Exception ex)
            {

            }


        }

        private void SiteLoaded(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            MessageBox.Show("hI ! website loaded Sucessfully");         

        }

但现在,消息弹出多次。

【问题讨论】:

  • “但两者都不起作用”不能很好地描述您的问题。究竟出了什么问题?
  • 您应该使用 Web 浏览器控件的 documentcomplete 事件。 msdn.microsoft.com/en-us/library/…
  • 另外,Task.Delay(2000) 实际上不会导致您的代码等待,除非您将其称为 await Task.Delay(2000)Task.Delay(2000).Wait()

标签: c# delay web-controls


【解决方案1】:

您应该使用 Web 浏览器控件的 documentcomplete 事件:

http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.documentcompleted(v=vs.110).aspx

这会在页面加载完成时通知您。你正在做的是进入一个while循环并阻止浏览器控件正在执行的线程,因此即使你进入线程睡眠也不会“工作”(顺便说一句,无论如何都不建议这样做)

【讨论】:

  • 我修改了我的问题,请检查..我使用了你建议我的方法,它工作正常,但在某些 URL 消息弹出多次意味着它在 SiteLoaded 函数中多次运行
  • 首先,您需要在导航之前先订阅事件 - 这是更好的做法,否则您可能会迟到收到通知。其次,可能是某些网站正在导航或在其网站上有多个导航,在这种情况下,事件将被多次引发 - 对此无能为力。您是否还检查了 eventhandler 参数包含的内容并查看它是否适合您? (“e”参数)
猜你喜欢
  • 2012-12-23
  • 1970-01-01
  • 2018-03-15
  • 1970-01-01
  • 2016-02-14
  • 2022-06-15
  • 2014-04-05
  • 2016-10-26
  • 1970-01-01
相关资源
最近更新 更多