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

标签 c# android xamarin.android

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

相关文章:

android - 在 Kotlin 中将 SVG 文件从 API 加载到 Android 中的 ImageView 中

java - 如何以编程方式在 ImageView 内显示多个可绘制对象(带边距)

android - 应用程序不断停止(仅在Azure DevOps的apk上)?

c# - 在 C# 中,如何调用返回列表的函数?

c# - 如何在 C# 中让系统服务在 (Services.msc) 下运行

安卓 : Is there a way to animate both group and listview of an ExpandableListView?

android - 从条形码扫描中获取结果

c# - 使用 EF Core 的 Visual Studio 2017 在迁移之前/之后更改 mdf 文件的本地数据库默认位置

c# - 异步 WebApi Thread.CurrentCulture

c# - Xamarin Forms Android 出 java.lang.OutOfMemoryError 异常