gpt4 book ai didi

c# - 在 Monodroid/C# 中将 AsyncTask 转换为任务

转载 作者:行者123 更新时间:2023-11-29 21:14:10 25 4
gpt4 key购买 nike

我想知道如何使用 .NET 的异步库实现这个 Android AsyncTask:

public class LoadRecordTask : AsyncTask
{
private Activity1 _context;
private int _recordId;

public LoadRecordTask( Activity1 outerActivity, int recordId )
{
_context = outerActivity;
_recordId = recordId;
}

protected override void OnPreExecute()
{
base.OnPreExecute();

_progressDialog = Android.App.ProgressDialog.Show( _context , "", "Loading record {0}", _recordId );
}

protected override Java.Lang.Object DoInBackground(params Java.Lang.Object[] @params)
{
_bSuccess = LoadRecord( _recordId );

if( !_bSuccess )
{
return false;
}

return true;
}

protected override void OnPostExecute(Java.Lang.Object result)
{
base.OnPostExecute(result);

if( !_bSuccess )
{
_progressDialog.SetMessage( "Error loading recording." );
}

_progressDialog.Dismiss();
}
}

最佳答案

AsyncTask你正在使用可以翻译成类似的东西:

_progressDialog = ProgressDialog.Show( _context , "", "Loading record {0}", _recordId );

if (await LoadRecord(_recordId))
_progressDialog.Dismiss();
else
_progressDialog.SetMessage( "Error loading recording." );

在哪里LoadRecord可能会返回 Task<bool>以及在 Task 内部运行的内部结构.否则你可以只包装 LoadRecord您当前在 Task 中使用的方法使其异步运行。

private Task<bool> LoadRecord(int recordId)
{
return Task<bool>.Run(() =>
{
//Do stuff here to fetch records
return true;
});
}

您从中调用 await 的方法需要标记为异步。即:

private async void MyAwesomeAsyncMethod() {}

关于c# - 在 Monodroid/C# 中将 AsyncTask 转换为任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21882631/

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