2016-01-23 61 views
2

我有一個下載任務,它以4個步驟從web下載數據,這些步驟被定義爲異步任務並逐個運行。現在由於一些改變,我需要在任務2和3之間的自定義對話框中捕獲用戶輸入。我已經編寫了一個捕獲AlertDialog輸入的函數。問題是對話框顯示在兩者之間,但它只是不等待並停止處理和過程,而不需要用戶輸入。該代碼是這樣的:Xamarin - 任務等待自定義對話框的輸入

async void button_click(......){ 
await function1(); 
await function2(); 
await function3(); 
await function4(); 
....do the data processing after that. 
} 

async Task<datatype> function1(){ ...processing step 1 } 
async Task<datatype> function2(){ 

new AlertDialog.Builder(this) 
       .SetPositiveButton("OK", (sender, args) => 
       { 
        string inputText = txtInput.Text; 
       }) 
       .SetView(customView) 
       .Show(); 

.... some more processing 
} 

有沒有什麼方法可以讓我停止處理,直到用戶輸入從AlertDialog或做相同的任何其他方式收到?

回答

4

你也許可以做這樣的事情:

public Task ShowDialog() 
{ 
    var tcs = new TaskCompletionSource<bool>(); 
    new AlertDialog.Builder(this) 
     .SetPositiveButton("OK", (sender, args) => 
     { 
      string inputText = txtInput.Text; 
      tcs.SetResult(true); 
     }) 
     .SetView(customView) 
     .Show(); 
    return tcs.Task; 
} 

然後,你可以這樣做:

await function1(); 
await ShowDialog(); 
await function2();