如何在下一行执行前等待一段时间

时间:2015-01-14 10:27:35

标签: c# delay web-controls

我希望在网页完全加载到我的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");         

        }

但是现在,消息会弹出多次。

1 个答案:

答案 0 :(得分:1)

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

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

这会在页面加载完成时通知您。你正在做的是进入一个while循环并保持浏览器控件正在执行的线程,因此什么都不会"工作"即使你进入线程睡眠(不建议BTW做什么)