我知道有类似的另外100个问题,但我似乎无法管理修复我的代码。我有一个返回Control的类,我想将此控件添加到TabControl的Tabpage中。我确定我做了一些迟钝的事情,我没有任何使用线程的经验。 如果我尝试修改此example,它仍然无效。但如果我不修改它,它确实会在我的标签中添加一个标签。
private void RUN()
{
document = new TextDocument(inputFile);//fileName
if (tabControl1.TabPages[0].InvokeRequired)
{
tabControl1.TabPages[0].BeginInvoke((MethodInvoker)delegate()
{
System.Windows.Forms.Label l = new System.Windows.Forms.Label(); l.Location = new System.Drawing.Point(12, 10);
l.Text = "Some Text";
tabControl1.TabPages[0].Controls.Add(l);
});//but if i have something like tabControl1.TabPages[0].Controls.Add(document.controls.content); i get an error
}
}
我也尝试过使用后台工作程序,也失败了。如果我不使用另一个线程它工作,但我需要其余的界面工作,同时创建该控件(我从xls文件读取并创建一个ViewList,然后我添加到tabpage)。
答案 0 :(得分:0)
不确定问题是什么......
这是一个在不同线程中创建的控件,但是在主UI线程中添加:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
System.Threading.Thread T = new System.Threading.Thread(new System.Threading.ThreadStart(RUN));
T.Start();
}
private void RUN()
{
// control created in a different thread:
System.Windows.Forms.Label l = new System.Windows.Forms.Label();
l.Location = new System.Drawing.Point(12, 10);
l.Text = "Some Text";
// control added in the main UI thread:
if (tabControl1.TabPages[0].InvokeRequired)
{
tabControl1.TabPages[0].BeginInvoke((MethodInvoker)delegate()
{
tabControl1.TabPages[0].Controls.Add(l);
});
}
}
}