我们本身是要做一个通过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();
简单修改方式:
openGetWeight.Click += button1_Click 写到构造里面去;
时钟使用Forms里面的Timer;
Click只管控制Timer实例Enable即可,Timer实例事件写页面控制;
感谢感谢,终于发现问题了,只能使用system.windows.form.timer,其余两种用了就报错。