跨线程操作无效:控件“statusStrip”从创建它的线程以外的线程访问
Posted
技术标签:
【中文标题】跨线程操作无效:控件“statusStrip”从创建它的线程以外的线程访问【英文标题】:Cross-thread operation not valid: Control 'statusStrip' accessed from a thread other than the thread it was created on 【发布时间】:2015-05-14 12:49:03 【问题描述】:我试过这个。 https://***.com/a/142069/2126472
点赞toolStripStatusLabel1.InvokeRequired
但是toolStripStatusLabel1
没有InvokeRequired
我也试过这个。 https://***.com/a/15831292/2126472
它的错误就像无效的参数一样
SetTextCallback d = new SetTextCallback(SetText);
form.Invoke(d, new object[] form, ctrl, text );
当我使用
ThreadHelperClass.SetText(this, toolStripStatusLabel1, "This text was set safely.");
但当我使用textBox
时不会出错
我的代码有方法等待bool
来自另一个使用线程在后台运行的方法。
Thread t = new Thread(TestRemoteDB);
t.Start();
// In TestRemoteDB() will call updateRemoteDBStatus()
喜欢这个
private void updateRemoteDBStatus(bool successful)
if (successful)
toolStripStatusLabel4.Text = "OK!";
toolStripStatusLabel4.ForeColor = Color.Green;
else
toolStripStatusLabel4.Text = "Error!";
toolStripStatusLabel4.ForeColor = Color.Red;
【问题讨论】:
你能粘贴你的完整代码吗 toolStripStatusLabel in multithreading的可能重复 【参考方案1】:试试这个:
this.BeginInvoke((Action)(() => toolStripStatusLabel1.Text = "This text was set safely."));
【讨论】:
这行不通,因为 ToolStripStatusLabel 没有 BeginInvoke 方法。即使这样做也没有任何意义,因为 ThreadHelperClass 已经在使用 Invoke 在 UI 线程上执行代码。而且它不会编译,因为 ToolStripStatusLabel 不是控件,因此不能与 OP 链接的 ThreadHelperClass 一起使用。 Lapsus,我的意思是“this”并写了“toolStripStatusLabel”。 Tnx。 我认为这是可行的,并且为我节省了很多代码行。非常感谢@Marko Juvančič。以上是关于跨线程操作无效:控件“statusStrip”从创建它的线程以外的线程访问的主要内容,如果未能解决你的问题,请参考以下文章
跨线程操作无效:控件“chart1”从创建它的线程以外的线程访问