我正在尝试将我的Form1文本框中的文本从一个帖子中更改为“hello there”。 但是当我执行它时,我得到错误“对象引用未设置为对象的实例”。 当我检查时,我看到txtboxCheckedFiels有一个Null值。
我如何创建该txtbox的对象? (我运行多个线程,所有线程都应该能够更改该文本。
我试过的代码:
txtboxCheckedFiles.Invoke(new Action(() =>
{
txtboxCheckedFiles.Text = "Hello there";
}));
我尝试的另一种方式
var t = new Thread(
o =>
{
txtboxCheckedFiles.BeginInvoke(
((Action)(() => txtboxCheckedFiles.Text = "Hello there")));
});
答案 0 :(得分:2)
它可能是相同的...但这是我一直使用的:
public void LabelWrite(string value)
{
if (InvokeRequired)
Invoke(new LabelWriteDelegate(LabelWrite), value);
else
{
textBox1.Text = value;
}
}
delegate void LabelWriteDelegate(string value);
就像一个魅力......你基本上可以在else {}中写下你想要的任何东西。
答案 1 :(得分:1)
首先,您必须检查是否需要调用,然后您可以调用它。 另外,考虑检查窗口是否有句柄,这意味着窗口已启动并运行(例如,如果您尝试在表单的构造函数中加载数据,则会失败)
if (this.InvokeRequired)
{
IAsyncResult result = BeginInvoke(new MethodInvoker(delegate()
{
// DOSTUFF
}));
// wait until invocation is completed
EndInvoke(result);
}
else if (this.IsHandleCreated)
{
// DO STUFF
}