Avatar ·

如何在C# WinForms中从其他线程更新界面(GUI)?

大家好!我是一名C#初学者,正在编写一个WinForms小应用程序。我有一个按钮,点击后会启动一个耗时操作(例如从互联网下载数据或处理大文件)。我希望在执行此操作期间界面保持响应,因此通过`Task.Run`在单独的线程中启动它。 当我尝试从后台线程更新界面元素(例如ProgressBar、Label或TextBox)时,问题出现了。应用程序崩溃并抛出异常:“InvalidOperationException: Cross-thread operation not valid. Control 'progressBar1' accessed from a thread other than the thread it was created on.” 以下是我的代码示例: ```csharp private void buttonStart_Click(object sender, EventArgs e) { Task.Run(() => DoWork()); } private void DoWork() { for (int i = 0; i <= 100; i++) { // 模拟耗时工作 Thread.Sleep(50); // 尝试更新进度条