首页 新闻 赞助 找找看

winform调用webBrowser使用多线程

0
悬赏园豆:30 [已解决问题] 解决于 2017-05-20 14:55

  我们本身是要做一个通过winform的webBrowser加载我们自己的一个网站的程序,当点击网站的一个按钮,则触发一个线程每隔1秒钟获取一条本地数据,当获得了指定数据后将数据传到webBrowser的某一个控件里,同时关闭线程。

  这时候出现问题了,当我不调用线程,直接点击获取一条数据的时候,一切正常,但是一旦开辟一条线程来执行,在赋值时

this.webBrowser1.Document.GetElementById("weight").InnerText = "666";

会报错:“指定的转换无效,当一个数字执行强制转换时,值必须是一个小于无限大的数字”。

  求大神门帮忙看看是什么情况,我没怎么写过winform,不是很懂webBrowser的执行原理。

  下面附上代码:

1、webBrowser中butten控件追加本地的按钮事件,触发线程

/// <summary>
        /// webBrowser页面元素加载完成后触发
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            //将本地开始和结束称重按钮与webBrowser加载网页内的相关控件绑定
            HtmlElement openGetWeight = this.webBrowser1.Document.GetElementById("btnOpen");
            openGetWeight.Click += button1_Click;
            HtmlElement closeGetWeight = this.webBrowser1.Document.GetElementById("btnClose");
            closeGetWeight.Click += button2_Click;
        }

2、开辟线程

/// <summary>
        /// 开辟线程
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            //开辟线程
            t = new System.Threading.Timer(new TimerCallback(GetWeight), null, 0, 10000);
        }

3、线程执行的方法

/// <summary>
        /// 称重
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void GetWeight(object sender)
        {
            string weight = string.Empty;

            this.webBrowser1.Document.GetElementById("weight").InnerText = "666";

            t.Dispose();

 

 

单纯的小白的主页 单纯的小白 | 初学一级 | 园豆:108
提问于:2017-05-19 17:43
< >
分享
最佳答案
0

简单修改方式:

openGetWeight.Click += button1_Click 写到构造里面去;

时钟使用Forms里面的Timer;

Click只管控制Timer实例Enable即可,Timer实例事件写页面控制;

收获园豆:30
花飘水流兮 | 专家六级 |园豆:13560 | 2017-05-19 22:45

 感谢感谢,终于发现问题了,只能使用system.windows.form.timer,其余两种用了就报错。

单纯的小白 | 园豆:108 (初学一级) | 2017-05-20 14:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册