c# invoke 新线程
时间: 2024-10-27 12:11:41 浏览: 6
c#多线程中子线程动态改变ui控件
在 C# 中,`Invoke` 方法用于确保在用户界面线程 (UI Thread) 上执行某个操作,特别是当你的代码运行在一个单独的新线程中,并且需要修改或更新 UI 控制器(如 `TextBox`、`Label` 等)。当你有一个新线程正在处理耗时任务,而这些任务可能会改变 UI 状态时,如果不正确地使用 `Invoke`,就可能导致 `InvalidOperationException` 类型的异常。
例如:
```csharp
private void PerformTaskOnNewThread()
{
Thread thread = new Thread(() =>
{
// 在这里执行耗时任务
DoLongRunningWork();
// 这里需要将 UI 更新操作移到主线程
Invoke(new Action(() => UpdateUi()));
});
thread.Start(); // 开启新线程
}
private void UpdateUi()
{
textBox.Text = "工作已完成";
}
```
在这个例子中,`DoLongRunningWork` 方法在一个独立线程中执行,一旦任务结束,我们通过 `Invoke` 把 `UpdateUi` 方法包装成一个 Action 对象并传递给主线程,这样 UI 操作就会在正确的上下文中安全地执行。
阅读全文