0

我知道还有像这样的另外 100 个问题,但我似乎无法修复我的代码。我有一个返回控件的类,我想将此控件从 TabControl 添加到 Tabpage。我确定我在做一些迟钝的事情,而且我没有任何使用线程的经验。如果我尝试修改此示例,它仍然无法正常工作。但如果我不修改它,它会在我的标签中添加一个标签。

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,然后将其添加到标签页)。

4

1 回答 1

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);
            });
        }
    }

}
于 2013-06-29T20:22:00.580 回答