C# 跨线程操作无效:
我有一个只包含ZedGraph的用户控件 我试图为这个名为additself的用户控件编写一个方法,它将自己添加到主窗体的选项卡页中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); 由于这是一
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,所以将其放在委托中。