Avatar ·

如何从其他线程更新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