Avatar ·

跨线程操作无效错误:如何在C# WinForms中从其他线程访问控件

大家好!我是C#和WinForms的新手,在多线程问题上卡住了。我正在编写一个从互联网加载数据并显示在ListBox中的应用程序。为了防止界面卡顿,我通过Task.Run在单独的线程中启动加载。以下是简化代码: ```csharp private void buttonStart_Click(object sender, EventArgs e) { Task.Run(() => LoadData()); } private void LoadData() { for (int i = 0; i < 10; i++) { // 模拟数据加载 Thread.Sleep(1000); // 尝试向ListBox添加元素 listBoxResult.Items.Add("元素 " + i); } } ``` 运行时,在`listBoxResult.Items.Add(...)`这一行抛出异常:“Cross-thread operation not valid: Control 'listBoxResult' accessed from a thread other than the thread it was created on”。我知道这是因为控件是在主线程中创建的,而我却从后台线程访问它们。但如何正确修复这个问题?我读过关于Invoke和BeginInvoke的内容,