我不是一个真正优秀的 C# 程序员。我习惯了 C 但不习惯 C#。
我知道从 UI 线程以外的线程我们无法更改文本框和标签的属性。
因此,在尝试了几种不同的方法之后,我一直在使用这种方法:
item.Invoke(new EventHandler(delegate
{
item.Text = text;
}));
然后在写了一些代码之后,我发现每次都这样做很无聊而且效率低下,所以我做了一个方法:
static void change_text_from_different_thread(TextBox item, string text)
{
item.Invoke(new EventHandler(delegate
{
item.Text = text;
}));
}
然后我尝试在我的线程中使用它,问题是我无法从线程发送 TextBox。
假设这是我的线程:
{
change_text_from_different_thread(textbox1,"Hi");
}
然后我得到这个错误:
非静态字段、方法或属性需要对象引用
那么你能告诉我如何传递文本框吗?顺便说一句,我的调用方法有可能是错误的或非常危险的,但我找不到更简单的方法。如果真的很糟糕,请告诉我。如果没问题,也请告诉我。如果通过使用另一种方法,事情变得更好更容易,请也告诉我。
这是我第一次问问题,如果我错过了一些东西,对不起。非常感谢。
这是我的方法:
static void gyro_self_check_thread_function()
{
//lab lab
}
这就是我创建线程并启动它的方式:
private void Gyro_self_check_button_Click(object sender, EventArgs e)
{
Gyro_self_check_status_label.Text = "Status: Checking....";
gyro_self_testing_groupBox.Update();
_serialPort.Write(Protocal_Values.gyro_self_checking_request, 0, 2);
Thread gyro_self_check_thread = new Thread(gyro_self_check_thread_function);
gyro_self_check_thread.Start();
//Thread gyro_self_check_thread = new Thread(gyro_self_check_thread);
//gyro_self_check_thread.Start();
}