C#非UI线程弹窗,详细案例WPF
时间: 2024-09-08 21:04:34 浏览: 125
跨类跨线程访问C#源代码
在C#中,特别是在WPF (Windows Presentation Foundation) 应用程序中,通常我们会在主线程之外(非UI线程)执行耗时操作,如网络请求、文件读写等。为了避免阻塞用户界面,需要使用异步编程或专门处理线程通信的技术,如`Task`、`BackgroundWorker` 或 `Dispatcher`.
以下是一个简单的例子,演示如何在非UI线程上执行任务并显示结果在一个消息框:
```csharp
using System;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// 创建一个后台任务
ShowResultAsync("这是一个示例任务");
}
private async void ShowResultAsync(string result)
{
// 使用Dispatcher.Invoke将结果显示在线程上下文中
await Task.Run(() =>
{
Dispatcher.BeginInvoke(new Action(() =>
{
MessageBox.Show($"任务完成,结果:{result}");
}));
});
}
}
```
在这个例子中,`ShowResultAsync` 方法里创建了一个新的 `Task` 并在其内部执行。通过 `Dispatcher.Invoke`,我们在主线程上更新UI,确保消息框的显示不会影响到UI的响应。
阅读全文