C# webbrowser 多线程操作/跨线程操作

转发请标注来源:https://www.cnblogs.com/nanyunan/p/12271406.html

想要线程访问webbrowser,是可行的。但是需要一些小技巧,而在现今网络上,这些技巧被无效信息所掩盖。本文只是发现了一个技巧,并作记录,同时加一些自己的东西。

可以重写一个WebBrowser,如下。

    public class WebBrowserEx : System.Windows.Forms.WebBrowser
    {
        public delegate void CallNone();
        public delegate void CallOperate(CallNone Task);
        public void Operate(CallNone Task)
        {
            if (InvokeRequired)
            {
                CallOperate tmp = new CallOperate(Operate);
                Invoke(tmp,Task);
            }
            else
            {
                Task?.Invoke();
            }
        }
    }

使用方法:

WebBorwserEx web=new WebBrowserEx();
void Test() {
    web.Operate(()=>{
        web.Document.GetElementById("username").SetAttribute("value","用户名");
    });
    Thread.Sleep(800);
    web.Operate(()=>{
        web.Document.GetElementById("submit").InnoverMember("click");
    });    
}
Thread t=new Thread(Test);
t.IsBackground=true;
t.Start();

 

posted @ 2020-02-06 22:56  南语喃  阅读(613)  评论(2)    收藏  举报