android-asynctask - Xamarin - 任务等待来自自定义对话框的输入

标签 android-asynctask xamarin xamarin.android android-alertdialog

我有一个下载任务,它分 4 个步骤从 Web 下载数据,这些步骤被定义为异步任务并逐个运行。现在由于一些变化,我需要从任务 2 和 3 之间的自定义对话框中捕获用户输入。我编写了一个函数来捕获来自 AlertDialog 的输入。问题是在两者之间显示对话框,但它只是不等待并停止处理,并且过程继续进行而不需要用户输入。代码是这样的:

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 接收到用户输入或任何其他方式做同样的事情?

最佳答案

你可能会这样做:

public Task<bool> 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();

关于android-asynctask - Xamarin - 任务等待来自自定义对话框的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34965486/

相关文章:

Android,activity finish() 后退堆栈上的前一个 Activity 会发生什么情况?

java - 使用 ESC/POS 打印位图全页宽度

android - 错误读取json

android - 屏幕方向更改时未调用加载程序

android - 谷歌云消息 'Not Registered'失败和退订最佳实践?

xamarin - 适用于 xamarin 的 Epub 或 Mobi Sdk

Xamarin 更新后 Xamarin.Android 调试构建在 Visual Studio 2015 中失败

android - Mediaplayer 被 AsyncTask 停止 - MediaPlayer 在没有被释放的情况下完成

java - AsyncTask 是一个内部类 : get onPostExecute() result in Service

ios - Xamarin 表格 : CustomWebView on iOS didn't show a simple webpage