2017-05-04 16 views
0

我有调用服务器来更新数据库的功能,我等着它在返回结果之前完成:使用ProgressDialog与异步/等待,C#的Android

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; 
} 

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

谢谢。

+1

为什么要创建一个新线程?这打破了任务的目的。显示进度对话框后,只需等待任务,这就是你需要做的... – Gusman

回答

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; 
} 
+0

是的。现在明显:-)谢谢。 – MHugh

+0

如果有帮助,请接受答案:) – Gusman

+0

是的,是的,我现在有:-) – MHugh