WebBrowser 多线程 DocumentCompleted 和定时器

简介: 备忘   using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.

 

备忘

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using Fizzler;
using Fizzler.Systems;
using Fizzler.Systems.HtmlAgilityPack;
using Fizzler.Systems.XmlNodeQuery;



namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Uri url = new Uri("http://www.c-sharpcorner.com/forums/Search/?forum=0&searchtype=0&searchtext=");
            runBrowserThread(url);
        }

      static  private void runBrowserThread(Uri url)
        {
            var th = new Thread(() =>
            {
                var br = new WebBrowser();
                br.DocumentCompleted += browser_DocumentCompleted;
                br.Navigate(url);
           
                TimerCallback timerDelegate = new TimerCallback(CheckStatus);
            //System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(timerDelegate, br.DocumentText, 1000, 1000);
                System.Windows.Forms.Timer timers = new System.Windows.Forms.Timer();
                timers.Enabled = true;
                timers.Interval = 1000;
                timers.Tick += delegate(object o, EventArgs args)
                {
                    CheckStatus(br.DocumentText);
                };
                timers.Start();
                Application.Run();
                //Application.DoEvents();
               
            });
            th.SetApartmentState(ApartmentState.STA);
            th.Start();
        }

      static void CheckStatus(Object state)
      {

          try
          {

              string html = state.ToString();
          
             // Console.WriteLine(html);
              if (checklistbape(html))
              {
                  //这里主要用来进行ajax检测
                  //检测成功后,对内容进行处理
                  //定时器对页面状态进行轮训和判断进行那个操作
                  Console.WriteLine("OK");

                  // Application.ExitThread();   // Stops the thread
              }
              else
              {
                  Console.WriteLine("= =");
              }
          }
          catch (Exception ex)
          {
              string ss = "";
          }
      }
      private static bool checklistbape(string htmltext)
      {
          var html = new HtmlAgilityPack.HtmlDocument();
          html.LoadHtml(htmltext);
          var document = html.DocumentNode;
          var urlnode = document.QuerySelectorAll(".latestArticle>li").ToList();
          var next = document.QuerySelectorAll(".pagingSpritIcons").ToList();
          if (urlnode.Count == 0 || next.Count == 0)
          {
              return false;
          }
          else
          {
              return true;
          }
      }
     static   void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            var br = sender as WebBrowser;
            if (br.Url == e.Url)
            {
                Console.WriteLine("Natigated to {0}", e.Url);
               // Application.ExitThread();   // Stops the thread
            }
        }

    }
}
test
相关文章
|
6月前
多线程案例-定时器(附完整代码)
多线程案例-定时器(附完整代码)
301 0
|
6月前
|
设计模式 消息中间件 安全
多线程编程设计模式(单例,阻塞队列,定时器,线程池)(二)
多线程编程设计模式(单例,阻塞队列,定时器,线程池)(二)
60 1
|
6月前
|
安全 Java
Java多线程基础-10:代码案例之定时器(一)
`Timer` 是 Java 中的一个定时器类,用于在指定延迟后执行指定的任务。它常用于实现定时任务,例如在网络通信中设置超时或定期清理数据。`Timer` 的核心方法是 `schedule()`,它可以安排任务在延迟一段时间后执行。`
137 1
|
1月前
|
安全 Java
【多线程-从零开始-拾】Timer-定时器
【多线程-从零开始-拾】Timer-定时器
31 0
|
3月前
|
数据采集 Java Python
python 递归锁、信号量、事件、线程队列、进程池和线程池、回调函数、定时器
python 递归锁、信号量、事件、线程队列、进程池和线程池、回调函数、定时器
|
6月前
|
设计模式 安全 Java
多线程(代码案例: 单例模式, 阻塞队列, 生产者消费者模型,定时器)
多线程(代码案例: 单例模式, 阻塞队列, 生产者消费者模型,定时器)
58 2
|
6月前
|
设计模式 安全 Java
Java 多线程系列Ⅳ(单例模式+阻塞式队列+定时器+线程池)
Java 多线程系列Ⅳ(单例模式+阻塞式队列+定时器+线程池)
|
5月前
|
安全 Java 容器
线程池,定时器以及阻塞队列(生产者/消费者模型)
线程池,定时器以及阻塞队列(生产者/消费者模型)
41 0
|
6月前
|
消息中间件 缓存 Java
【多线程学习】深入探究定时器的重点和应用场景
【多线程学习】深入探究定时器的重点和应用场景
122 1
|
6月前
|
Java 调度
Java多线程基础-10:代码案例之定时器(二)
Java 多线程基础中,定时器(Timer)的实现通常使用 `PriorityBlockingQueue` 和 `wait/notify` 机制来管理任务。
47 0