1

我正在尝试将 Form1 文本框中的文本从线程中更改为“你好”。但是当我执行它时,我收到错误“对象引用未设置为对象的实例”。当我检查时,我看到 txtboxCheckedFiels 的值为 Null。

我将如何创建该 txtbox 的对象?(我有多个线程正在运行,所有线程都应该能够更改该文本。

我试过的代码:

txtboxCheckedFiles.Invoke(new Action(() =>
                {
                    txtboxCheckedFiles.Text = "Hello there";
                }));

我尝试过的另一种方式

var t = new Thread(
o => 
{
     txtboxCheckedFiles.BeginInvoke(
         ((Action)(() => txtboxCheckedFiles.Text = "Hello there")));
});
4

2 回答 2

2

可能是一样的..但这是我一直使用的:

    public void LabelWrite(string value)
    {
        if (InvokeRequired)
            Invoke(new LabelWriteDelegate(LabelWrite), value);
        else
        {
            textBox1.Text = value;
        }
    }
    delegate void LabelWriteDelegate(string value);

就像一个魅力..你基本上也可以在 else { } 中写任何你想要的东西。

于 2012-10-12T09:08:04.937 回答
1

首先你必须检查是否需要调用,然后你可以调用它。另外,请考虑检查窗口是否有句柄,这意味着窗口已启动并正在运行(例如,如果您尝试在表单的构造函数中加载数据,这将失败)

if (this.InvokeRequired)
{
    IAsyncResult result = BeginInvoke(new MethodInvoker(delegate()
    {
        // DOSTUFF
    }));

    // wait until invocation is completed
    EndInvoke(result);
}
else if (this.IsHandleCreated)
{
    // DO STUFF
}
于 2012-10-12T08:39:00.660 回答