我想知道如何使用 .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/