在 C# 中从单独线程更新 TextBox
在 Windows 窗体应用程序中,避免从非 UI 线程访问 UI 元素至关重要。当尝试从单独的线程操作 TextBox 时,您可能会遇到“此类型的操作在此线程上无效”异常。为了解决这个问题,您需要正确处理跨线程通信。
要从单独的线程更新 TextBox,您应该在主窗体上创建一个方法来检查 Control 类的 InvokeRequired 属性。如果 InvokeRequired 为 true,则意味着调用是从非 UI 线程进行的,您需要使用 Invoke 方法将调用编组到 UI 线程。
例如,请考虑以下代码片段:
public partial class Form1 : Form { public Form1() { InitializeComponent(); new Thread(SampleFunction).Start(); } public void AppendTextBox(string value) { if (InvokeRequired) { this.Invoke(new Action<string>(AppendTextBox), new object[] { value }); return; } ActiveForm.Text += value; } void SampleFunction() { // Gets executed on a separate thread for (int i = 0; i < 5; i++) { AppendTextBox("hi. "); Thread.Sleep(1000); } } }
在此示例中,AppendTextBox 方法检查 InvokeRequired 标志,并在必要时使用 Invoke 封送调用到 UI 线程。在 SampleFunction 方法中,可以从单独的线程安全地调用 AppendTextBox 方法,而不会导致异常。这种方法使您能够从非 UI 线程更新 UI 元素,同时保持线程安全。
以上是如何从单独的线程安全地更新 C# 文本框?的详细内容。更多信息请关注PHP中文网其他相关文章!