如何在c#控制台应用程序中使用定时器和web浏览器

本文关键字:定时器 web 浏览器 控制台 应用程序 | 更新日期: 2023-09-27 18:12:12

我正在尝试加载多个url的一个接一个,我正在使用计时器。勾选功能,以便所有ajax数据加载在网页中。

    但是问题是控制台应用程序在计时器之前关闭。滴答是在计时器间隔后调用,因为计时器是新线程的?

注意****:我也使用[STAThread]作为主要方法,因为如果我不使用它,它会显示一个关于。pdb文件未加载的警告

[statthread]在这里的作用是什么?

如何解决这个问题。有没有办法让它等到计时器停止。下面是代码示例:

static void Main(string[] args)
    {
        OpenURLInBrowser("https://www.google.co.in/");
    }
private static void OpenURLInBrowser(String url)
    {
        if (!url.StartsWith("http://") && !url.StartsWith("https://"))
        {
            url = "http://" + url;
        }
        try
        {
            webbrowser.AllowNavigation = true;
            webbrowser.ScriptErrorsSuppressed = true;
            webbrowser.Navigate(new Uri(url));
            WaitTillPageLoadsCompletly(DynamicWebBrowser.webbrowser);
            timer.Interval = 10000;
            timer.Tick += Timer_Tick;
            timer.Start();
        }
        catch (UriFormatException)
        {
            return;
        }
    }
    private static void Timer_Tick(object sender, EventArgs e)
    {
        if (webbrowser.ReadyState == WebBrowserReadyState.Complete)
        {
            HtmlElement element = webbrowser.Document.GetElementById("loadingDiv");
            if (element != null)
            {
                Console.Write(element.OuterHtml + "'n'n'n");
                Console.WriteLine("==============================================================================================================" + "'n'n'n");
                timer.Stop();
                int count = 0;
                while (count < 2)
                {
                    OpenURLInBrowser("https://www.google.co.in/");
                    count++;
                }
            }
        }
    }
private static void WaitTillPageLoadsCompletly(WebBrowser webBrControl)
    {
        WebBrowserReadyState loadStatus;
        int waittime = 20000;
        int counter = 0;
        while (true)
        {
            loadStatus = webBrControl.ReadyState;
            Application.DoEvents();
            if ((counter > waittime) || (loadStatus == WebBrowserReadyState.Uninitialized) || (loadStatus == WebBrowserReadyState.Loading) || (loadStatus == WebBrowserReadyState.Interactive))
            {
                break;
            }
            counter++;
        }
        counter = 0;
        while (true)
        {
            loadStatus = webBrControl.ReadyState;
            Application.DoEvents();
            if (loadStatus == WebBrowserReadyState.Complete && webBrControl.IsBusy != true)
            {
                break;
            }
            counter++;
        }
    }

如何在c#控制台应用程序中使用定时器和web浏览器

static void Main(string[] args)
    {
        OpenURLInBrowser("https://www.google.co.in/");
        Console.ReadKey();
    }

可以使用Console.ReadKey()或Console.ReadLine()要停止控制台应用程序退出

你做错了。你不应该生成一个进程(在本例中是WebBrowser控件),然后进入一个紧密循环,检查它的状态是否发生了变化。

开始加载页面,并将代码绑定到WebBrowser控件的DocumentCompleted事件。这样,当浏览器完成加载页面时,它将执行完成代码(可以加载下一个页面,或者您想要它做的任何事情),而不必坐在循环中监视它,这只会浪费资源。

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