C# 如何为线程指定TextBox类型的对象
这里我得到了一个错误,textBox1没有属性文本,在主线程中一切正常,但在新线程中我得到了一个错误,如何解决这个问题?在使用其文本属性之前,必须将C# 如何为线程指定TextBox类型的对象,c#,.net,C#,.net,这里我得到了一个错误,textBox1没有属性文本,在主线程中一切正常,但在新线程中我得到了一个错误,如何解决这个问题?在使用其文本属性之前,必须将对象转换为键入TextBox private void button1_Click(object sender, EventArgs e) { t = new Thread(new ParameterizedThreadStart(startRequest)); t.Start(textBox1); } void startRequ
对象转换为键入TextBox
private void button1_Click(object sender, EventArgs e)
{
t = new Thread(new ParameterizedThreadStart(startRequest));
t.Start(textBox1);
}
void startRequest(object textBox1)
{
textBox1.Text = "hello";
}
如果强制转换失败,最好检查null 在使用对象的Text属性之前,必须将其强制转换为键入TextBox
private void button1_Click(object sender, EventArgs e)
{
t = new Thread(new ParameterizedThreadStart(startRequest));
t.Start(textBox1);
}
void startRequest(object textBox1)
{
textBox1.Text = "hello";
}
如果强制转换失败,最好检查null 对象没有属性,您需要将类型cast
对象转换为文本框
,您将无法访问文本框,尽管当前线程不是GUI线程
。您可以使用MethodInvoker
调用GUI线程中的代码,如下所示
void startRequest(object textBox1)
{
MethodInvoker mi = delegate
{
TextBox tempTextBox = textBox1 as TextBox;
if (tempTextBox != null)
tempTextBox.Text = "hello";
};
if (this.InvokeRequired)
this.Invoke(mi);
}
对象没有属性,您需要将键入cast
对象到文本框
,但您将无法访问文本框,因为当前线程不是GUI线程
。您可以使用MethodInvoker
调用GUI线程中的代码,如下所示
void startRequest(object textBox1)
{
MethodInvoker mi = delegate
{
TextBox tempTextBox = textBox1 as TextBox;
if (tempTextBox != null)
tempTextBox.Text = "hello";
};
if (this.InvokeRequired)
this.Invoke(mi);
}
您不能从UI线程以外的线程访问UI组件。你会在这里得到例外
void startRequest(object textBox1)
{
MethodInvoker mi = delegate {
((TextBox) textBox1).Text = "hello";
}
if(InvokeRequired)
this.Invoke(mi);
}
如果您试图从另一个线程执行此操作。您不能从UI线程以外的线程访问UI组件。你会在这里得到例外
void startRequest(object textBox1)
{
MethodInvoker mi = delegate {
((TextBox) textBox1).Text = "hello";
}
if(InvokeRequired)
this.Invoke(mi);
}
如果您尝试从另一个线程执行此操作。是否尝试在Windows应用程序中创建后台线程以更改WinForm上控件的属性?不要这样做-这行不通。有什么方法可以这样做吗?您是否正在尝试在Windows应用程序中创建后台线程以更改WinForm上控件的属性?不要这样做-这不起作用。有什么方法可以这样做吗?我想你应该指定强制转换的正常方法以及不使用它的原因Cross thread operation not valid:控件“textBox1”是从创建它的线程以外的线程访问的。-现在:(看起来现在有办法从另一个线程访问文本框,只能从主线程访问?@Zecrow,你可以,我的代码中有一个错误,现在检查plzWow,是的,它工作了,但只是出于好奇,为什么这么复杂的代码?只是为了添加一些文本…无论如何,我想你应该指定转换的正常方式以及原因。)n不使用itCross thread操作无效:控件“textBox1”是从创建它的线程以外的线程访问的。-现在:(看起来现在有办法从另一个线程访问文本框,只能从主线程?@Zecrow,你可以,我的代码中有一个错误,现在检查plzWow,是的,它工作了,但只是出于好奇,为什么这么复杂的代码?只是为了添加一些文本…无论如何,谢谢