gpt4 book ai didi

c# - C# (.NET) 中类似 Android AsyncTask 的功能

转载 作者:行者123 更新时间:2023-11-30 09:45:50 24 4
gpt4 key购买 nike

您可能知道,Android 的 SDK 具有一个 AsyncTask 类,它允许在单独的线程上执行代码并在主 (UI) 线程中获取结果。简而言之,是这样的:

class AsyncTask
{
void onPreExecute(...)
{
//Executed on the main thread BEFORE the secondary thread gets to work on anything.
}

void execute(...)
{
//This runs on the secondary thread.
}

void onPostExecute(...)
{
//This runs on the main thread AFTER the secondary thread finishes work. You get the result here in the form of some data type.
}
}

当然,这只是一个粗略的方案,但如果您不熟悉 AsyncTask,它应该提供足够的信息。基本上,我在 Microsoft 的 .NET Framework 中寻找相同的功能。

在我开始使用自己的类来执行此操作之前,我想确保框架中没有任何东西可以让我获得所需的结果。我正在使用 .NET 4.0。也许是对 System.Threading.Tasks.Task 的某种“巧妙”使用?不知道,我会把这个留给你。

简而言之,我想将一些输入传递给一个函数,在辅助线程上运行代码,并在完成时通过主线程更新一些 UI 元素。锁定主线程(例如通过 Task.Wait())不能很好地满足我的要求。

最佳答案

您可以使用 .Net 中的 Task 类实现您想要的。

下面是一些应该可以帮助您入门的代码:

var task = Task.Factory.StartNew(() => YourMethodGoesHere());

task.ContinueWith(t => UpdateYourUiInThisContinuation(),
TaskScheduler.FromCurrentSynchronizationContext());

task.ContinueWith(t => HandleAnExceptionWhichTheTaskMayThrow(),
TaskContinuationOptions.OnlyOnFaulted);

这将安排 YourMethodGoesHere() 从 UI 线程运行。延续 UpdateYourUiI​​nThisContinuation() 将安排在初始任务完成后运行,我使用的重载将强制它在相同的同步上下文中继续(UI 线程,假设正在调用此代码最初是 UI 线程)。

最后一个延续是处理任务中代码可能抛出的任何异常的好习惯。如果您不处理它(除了使用此延续之外还有其他方法),您最终会得到一个未处理的 AggregateException。

关于c# - C# (.NET) 中类似 Android AsyncTask 的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7430667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com