转换的AsyncTask到任务MonoDroid的/ C# [英] Convert AsyncTask to Task in Monodroid/C#
本文介绍了转换的AsyncTask到任务MonoDroid的/ C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我不知道如何使用.NET的异步库来实现这个Android的AsyncTask:
公共类LoadRecordTask:AsyncTask的
{
私人活动1 _context;
私人诠释_recordId; 公共LoadRecordTask(活性1 outerActivity,诠释的recordId)
{
_context = outerActivity;
_recordId =的recordId;
} 保护覆盖无效在preExecute()
{
base.On preExecute(); _progressDialog = Android.App.ProgressDialog.Show(_context,,加载记录{0},_recordId);
} 保护覆盖的java.lang.Object DoInBackground(PARAMS的java.lang.Object [] @params)
{
_bSuccess = LoadRecord(_recordId); 如果(!_bSuccess)
{
返回false;
} 返回true;
} 保护覆盖无效OnPostExecute(的java.lang.Object结果)
{
base.OnPostExecute(结果); 如果(!_bSuccess)
{
_progressDialog.SetMessage(错误加载记录。);
} _progressDialog.Dismiss();
}
}
解决方案
在您使用的是可以转化为类似于的AsyncTask
:
_progressDialog = ProgressDialog.Show(_context,,加载记录{0},_recordId);如果(的await LoadRecord(_recordId))
_progressDialog.Dismiss();
其他
_progressDialog.SetMessage(错误加载记录。);
其中, LoadRecord
可返回任务<布尔>
和内部运行的内部任务
。否则,你可以只是包装您目前正在使用的任务的
,使其运行异步。 LoadRecord
法
私人任务<布尔> LoadRecord(INT的recordId)
{
返回任务<布尔> .RUN(()=>
{
//做的东西在这里获取记录
返回true;
});
}
您是从需求的呼叫等待方法被标记为异步。即:
专用异步无效MyAwesomeAsyncMethod(){}
I was wondering how to implement this Android AsyncTask using .NET's async libraries:
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();
}
}
解决方案
The AsyncTask
you are using could be translated to something like:
_progressDialog = ProgressDialog.Show( _context , "", "Loading record {0}", _recordId );
if (await LoadRecord(_recordId))
_progressDialog.Dismiss();
else
_progressDialog.SetMessage( "Error loading recording." );
Where LoadRecord
could be returning Task<bool>
and the internals running inside of Task
. Otherwise you can just wrap the LoadRecord
method you are currently using in a Task
to make it run async.
private Task<bool> LoadRecord(int recordId)
{
return Task<bool>.Run(() =>
{
//Do stuff here to fetch records
return true;
});
}
The method you are calling await from needs to be marked as async. I.e.:
private async void MyAwesomeAsyncMethod() {}
这篇关于转换的AsyncTask到任务MonoDroid的/ C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文