C# 从同步方法内部调用MessageDialog.ShowAsync的替代方法

C# 从同步方法内部调用MessageDialog.ShowAsync的替代方法,c#,windows-runtime,async-await,winrt-async,C#,Windows Runtime,Async Await,Winrt Async,因此,我有以下代码(有点)需要调用MessageDialog.ShowAsync并等待结果: public object Execute() { var messageDialog = new MessageDialog("", ""); await messageDialog.ShowAsync(); } 但由于Execute()是接口的一部分,因此我无法更改其签名以返回任务或作废。到目前为止,我想到的最好的方法是: public object Execute() { va

因此,我有以下代码(有点)需要调用MessageDialog.ShowAsync并等待结果:

public object Execute()
{
   var messageDialog = new MessageDialog("", "");
   await messageDialog.ShowAsync();
}
但由于Execute()是接口的一部分,因此我无法更改其签名以返回任务或作废。到目前为止,我想到的最好的方法是:

public object Execute()
{
   var messageDialog = new MessageDialog("", "");
   messageDialog.ShowAsync().AsTask().ContinueWith(c =>
   {
       // ...               
   });
}

简而言之,的可能重复:messageDialog.ShowAsync().AsTask().Wait()@mydogisbox:这个问题的前两个答案非常危险。最好的解决方案是改变接口;您试图阻止UI线程,但您不应该这样做。@StephenCleary,这很公平。这个问题仍然是个难题@cadessi,如果您确实无法更改接口,您可能可以使用嵌套的消息循环,如使用
CoreDispatcher
ProcessEvents
/
RunAsync
/
StopProcessEvents
。这是未经测试的,不建议使用。