如何在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);
// 尝试更新进度条