c#环境下,我需要在新线程中执行函数并将结果返回给外部函数作为返回值,并且不卡顿
时间: 2024-11-09 14:25:26 浏览: 5
C#调用C++动态库,执行回调函数并传递结构体参数
在 C# 中,如果你想要在一个新线程中异步执行某个函数并将其结果返回给外部函数,可以使用 `Task` 和 `async`/`await` 关键字。这能确保主程序不会因为等待子线程完成而阻塞,保持界面响应。以下是基本步骤:
1. 定义一个 `async` 函数,它将执行耗时操作放到 `Task.Run` 或 `ThreadPool.QueueUserWorkItem` 中:
```csharp
public async Task<T> ExecuteFunctionAsync(Func<Task<T>> function)
{
// 使用Task.Run将工作转移到非UI线程
var result = await Task.Run(function);
return result;
}
```
2. 调用这个函数时,外部函数需要接受一个 `Func<Task<T>>` 类型的参数,该参数代表在新线程上执行的任务:
```csharp
private async void Button_Click(object sender, EventArgs e)
{
string result = await ExecuteFunctionAsync(() => DoLongRunningTask());
// 处理result...
}
private Task<string> DoLongRunningTask()
{
// 这里放你的耗时任务代码
// ...
return taskResult; // 返回任务的结果
}
```
阅读全文