【问题标题】:Using ProgressDialog with async/wait, C# Android将 ProgressDialog 与异步/等待一起使用,C# Android
【发布时间】:2017-05-04 15:25:45
【问题描述】:

我有一个调用服务器来更新数据库的函数,我在返回结果之前等待它完成:

public async Task<int> CarryOutPreRegisterDevice(string emailAddress)
{
    int intRet=-1;
    Task<int> tski = PreRegisterDevice(emailAddress);

    intRet = await tski;
    return intRet;
}

我想做的是在发生这种情况时显示一个进度对话框。但是,只要我将 await 行包装在进度对话框中,它就会允许原始线程在等待的任务完成之前运行并返回 intRet。

public async Task<int> CarryOutPreRegisterDevice(string emailAddress)
{
    int intRet = -1;
    Task<int> tski = PreRegisterDevice(emailAddress);

    ProgressDialog progressDialog;
    progressDialog = ProgressDialog.Show(AppGlobals.CurrentActivity, "", "Sending....", true);
    progressDialog.SetProgressStyle(ProgressDialogStyle.Spinner);
    new Thread(new ThreadStart(async delegate
    {

        intRet = await tski;

        progressDialog.Dismiss();
    })).Start();

    return intRet;
}

有没有更好的方法来构造它,以便在任务完成之前不会执行返回行。

谢谢。

【问题讨论】:

  • 为什么要创建一个新线程?这违背了任务的目的。在显示进度对话框后等待任务,这就是您需要做的一切......

标签: c# android asynchronous progressdialog


【解决方案1】:

不知道你为什么创建了一个线程,这违背了任务的目的。如果您想在长任务运行时显示微调器,只需在显示进度对话框后等待它:

public async Task<int> CarryOutPreRegisterDevice(string emailAddress)
{
    ProgressDialog progressDialog;
    progressDialog = ProgressDialog.Show(AppGlobals.CurrentActivity, "", "Sending....", true);
    progressDialog.SetProgressStyle(ProgressDialogStyle.Spinner);

    var intRet = await PreRegisterDevice(emailAddress);

    progressDialog.Dismiss();

    return intRet;
}

【讨论】:

  • 是的。现在很明显:-) 谢谢。
  • 是的,是的,我现在有:-)
猜你喜欢
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
相关资源
最近更新 更多