跨线程操作无效:

时间:2014-05-10 20:51:41

标签: c# multithreading

我有一个只包含ZedGraph的用户控件。

我试图为这个名为additself的用户控件编写一个方法,它将自己添加到主窗体的标签页中。

TabPage newpage = new TabPage();
newpage.Controls.Add(this.zedGraphControl1);
(form1.Controls["tableLayoutPanel1"].Controls["tabControl1"] as TabControl).TabPages.Add(newpage);

因为它是一个跨线程操作,所以会出现错误,我通过添加

来修复它
TabPage newpage = new TabPage();
newpage.Controls.Add(this.zedGraphControl1);
form1.Invoke((MethodInvoker)delegate
{
    (form1.Controls["tableLayoutPanel1"].Controls["tabControl1"] as TabControl).TabPages.Add(newpage);
});

出于某种原因,它仍然会显示一条错误消息,指出zedgraph是从创建它的线程中访问的。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您仍然在另一个线程上创建控件;您只需将代码插入到表单中的UI线程中。将以TabPage newpage = new TabPage();开头的所有内容移至Invoke()