C#中用Backgroundworker调用UI的textbox控件,对其赋值,有时会抛出异常。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中用Backgroundworker调用UI的textbox控件,对其赋值,有时会抛出异常。相关的知识,希望对你有一定的参考价值。
已设定UI的CheckForIllegalCrossThreadCalls = false;
backWorker1_DoWork中做的事情是没隔500毫秒做一些计算,然后将计算结果赋值给UI的textbox;
赋值代码如下:tbBox1Loop.Text = (loop + 1).ToString();
运行过程中有时会抛出异常,提示冲突
对控件的操作应该交给创建控件的线程去完成,先判断InvokeRequired,然后调用Invoke方法
比如:
//使用Invoke方法来设置进度条private void RunWithInvoke()
int value = progressBar.Value;
while (value< progressBar.Maximum)
//如果是跨线程调用
if (InvokeRequired)
this.Invoke(new SetProgressBarValue(SetProgressValue), value++);
else
progressBar.Value = ++value;
参考技术A 在Backgroundworker中用ReportProgress向画面交互。
将 CheckForIllegalCrossThreadCalls 设置为 true
可以在调试时更容易查找并诊断此线程活动。请注意在调试器外部启动应用程序时,非法跨线程调用将始终引发异常。 参考技术B doWork中不能直接对空间进行访问
跨线程访问空间的方请参考:
http://www.cnblogs.com/TankXiao/p/3348292.html本回答被提问者采纳 参考技术C
这句改一下,
tbBox1Loop.Invoke(new Action(delegatetbBox1Loop.Text = (loop + 1).ToString();
));
以上是关于C#中用Backgroundworker调用UI的textbox控件,对其赋值,有时会抛出异常。的主要内容,如果未能解决你的问题,请参考以下文章