Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 跨线程操作无效:_C#_Multithreading - Fatal编程技术网

C# 跨线程操作无效:

C# 跨线程操作无效:,c#,multithreading,C#,Multithreading,我有一个只包含ZedGraph的用户控件 我试图为这个名为additself的用户控件编写一个方法,它将自己添加到主窗体的选项卡页中 TabPage newpage = new TabPage(); newpage.Controls.Add(this.zedGraphControl1); (form1.Controls["tableLayoutPanel1"].Controls["tabControl1"] as TabControl).TabPages.Add(newpage); 由于这是一

我有一个只包含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是从创建它的线程访问的


如何解决此问题?

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

在后台线程上添加一个新的选项卡页真的需要这么多时间吗?在任何情况下,这不会使tabpage归线程所有吗?tab控件归前台线程所有吗?可能是因为您在错误的线程中创建了tabpage,所以将其放在委托中。