【问题标题】:How to process while waiting for user input from ContentDialog如何在等待来自 ContentDialog 的用户输入时进行处理
【发布时间】:2021-09-26 10:03:14
【问题描述】:

对于异步任务,我经常推迟await 以执行其他处理,同时等待异步任务返回。例如,而不是:

bool t = await myAsync();

我用

Task<bool> t = myAsync();
//do something else here while waiting
await t; //or await Task.WhenAll(t, p, s); when more than one

如何将这种方法用于ContentDialog?我想在用户等待响应时向用户显示内容对话框并执行其他处理。

我尝试了以下方法但失败了,因为ContentDialog 返回IAsyncOperation 而不是Task

Task<ContentDialogResult> result = myContentDialog.ShowAsync();
//do something else here
await result;

我怎样才能做到这一点?

【问题讨论】:

  • 如果你改写var result = myContentDialog.ShowAsync();会发生什么?
  • 谢谢,这实际上帮助我弄清楚了!
  • 进展如何?如果问题已经解决,请标记有用的答案。为此,更多面临相同问题的成员可以快速获得帮助。

标签: c# async-await uwp


【解决方案1】:

IAsyncOperation 的工作方式类似于 Task。 我可以通过等待IAsyncOperation 然后使用GetResults() 来获得用户响应来实现这一点。

要复制创建一个名为“MyTextBox”的ButtonTextBox,然后将下面的代码粘贴到Button_Clicked 事件中。

//prep dialog
ContentDialog dialog = new ContentDialog
{
     Content = "Test Dialog",
     Title = "Test Dialog",
     SecondaryButtonText = "Cancel",
     PrimaryButtonText = "OK"
};


//show dialog
IAsyncOperation<ContentDialogResult> result = dialog.ShowAsync();

//do some background processing
MyTextBlock.Text = "background processing...";

//wait for user response
_ = await result;

//get user response
ContentDialogResult buttonClicked = result.GetResults();
            
//display user response on screen
if(buttonClicked != ContentDialogResult.Primary)
{
    MyTextBlock.Text += "\nYou cancelled!";
}
else
{
   MyTextBlock.Text += "\nYou pressed OK!";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    相关资源
    最近更新 更多