2017-05-04 41 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