c# 创建多线程失败
ThreadthdProcess=newThread(checkjs);thdProcess.Start();functionvoidcheckjs(){HtmlDocu...
Thread thdProcess = new Thread(checkjs);
thdProcess.Start();
function void checkjs(){
HtmlDocument hDoc = webBrowser1.Document;
………………
}
启动线程时失败,提示 HtmlDocument hDoc = webBrowser1.Document;
“System.InvalidCastException”类型的未经处理的异常在 System.Windows.Forms.dll 中发生
其他信息: 指定的转换无效。 展开
thdProcess.Start();
function void checkjs(){
HtmlDocument hDoc = webBrowser1.Document;
………………
}
启动线程时失败,提示 HtmlDocument hDoc = webBrowser1.Document;
“System.InvalidCastException”类型的未经处理的异常在 System.Windows.Forms.dll 中发生
其他信息: 指定的转换无效。 展开
1个回答
2018-04-04 · 知道合伙人互联网行家
关注
展开全部
不能从线程里直接使用this.label4.Text = shun_liuliang + "\r\n";这种的东西
因为UI控件操作不是线程安全的
如果要通过线程更改UI,需要使用invoke来做
1.在Form里写一个更改UI的函数
2.声明一个代理,这个代理可以代理这个更改UI的函数
3.函数内部
if(this.label4.invokerequied)//判断是否需要invoke操作
{
//实例化此函数自身的代理
//如果此函数有参数,需要创建一个数组,按参数数量和顺序存放参数
//使用this.label4.begininvoke(代理,参数)来申请UI更新
}
else
{
//更新代码,如this.label4.Text = shun_liuliang + "\r\n";
}
4.线程中,在要更新的地方调用这个函数即可
因为UI控件操作不是线程安全的
如果要通过线程更改UI,需要使用invoke来做
1.在Form里写一个更改UI的函数
2.声明一个代理,这个代理可以代理这个更改UI的函数
3.函数内部
if(this.label4.invokerequied)//判断是否需要invoke操作
{
//实例化此函数自身的代理
//如果此函数有参数,需要创建一个数组,按参数数量和顺序存放参数
//使用this.label4.begininvoke(代理,参数)来申请UI更新
}
else
{
//更新代码,如this.label4.Text = shun_liuliang + "\r\n";
}
4.线程中,在要更新的地方调用这个函数即可
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询