从其他线程访问文本框

时间:2013-02-07 10:45:19

标签: c# textbox

我正在使用以下代码

从另一个线程中将文本写入文本框
delegate void SetTextCallback(string text);
private void SetText1(string text)
    {
        if (this.textBox7.InvokeRequired)
        {
            SetTextCallback d = new SetTextCallback(SetText1);
            this.Invoke(d, new object[] { text});
        }
        else
        {
            this.textBox7.Text = text;
        }
}

现在我必须将文本写入多个文本框(例如textBox8,9,10)。我希望同样的功能 SetText1 能够正常工作。所以我有一种方法可以在这个函数中创建textBox7变量,并使用我打算从另一个线程写入的文本框。

否则,如果我按照当前的方法,那么如果我想写入十个文本框,我将需要十个 SetText函数

2 个答案:

答案 0 :(得分:9)

你可以只使用一个功能 - 你甚至不需要代理

 private void SetText(TextBox txt, string text)
    {
        if (txt.InvokeRequired)
        {
           Invoke((MethodInvoker)(() => txt.Text = text));
        }
        else
        {
            txt.Text = text;
        }
    }

答案 1 :(得分:6)

delegate void SetTextCallback(TextBox textBox, string text);
private void SetText(TextBox textBox, string text)
{
    if (textBox.InvokeRequired)
    {
        SetTextCallback d = new SetTextCallback(SetText);
        this.Invoke(d, new object[] {textBox, text});
    }
    else
    {
        textBox.Text = text;
    }
}