如何从其他线程更新C# WinForms中的GUI?
各位同事,大家好!我是一名C#初学者开发者,遇到了一个让我抓狂的问题。我有一个Windows Forms应用程序,它执行一个耗时操作(例如处理大量文件列表或从互联网下载数据)。为了防止界面卡死,我使用`Task.Run`或`Thread`在单独的线程中运行此操作。
以下是我的简化代码示例:
```csharp
private void buttonStart_Click(object sender, EventArgs e)
{
Task.Run(() => LongRunningOperation());
}
private void LongRunningOperation()
{
for (int i = 0; i < 100; i++)
{
// 一些工作
Thread.Sleep(100);
// 尝试更新ProgressBar
progressBar1.Value = i;
// 或者更新Label
labelStatus.Text = $"已处理 {i} 个,共100个";
}
}
```
但当我运行应用程序并点击按钮时,它抛出了异常:
**"System.InvalidOperationException: 'Cross-thread operation not valid: Control 'progress