C# 如何强制执行停止,直到异步函数完全执行?

C# 如何强制执行停止,直到异步函数完全执行?,c#,silverlight,asynchronous,dynamics-crm-2011,async-await,C#,Silverlight,Asynchronous,Dynamics Crm 2011,Async Await,我正在为CRM创建silverlight应用程序,如下所示: 1-Ausercontrol这是一个表单,由使用async/await从CRM检索的数据填充 2-一个打印按钮,用于创建该用户控件的实例并打印它 我在执行序列中遇到了一个问题,导致Print按钮打印usercontrol时没有数据,也就是说,它是在异步方法完成之前执行的 我的代码如下: 用户控制: 单击“打印”时,将创建ManagerContact用户控件的一个新实例,并通过用户控件中的所有函数执行,直到到达行 var resp

我正在为CRM创建silverlight应用程序,如下所示:

1-Ausercontrol这是一个表单,由使用async/await从CRM检索的数据填充

2-一个打印按钮,用于创建该用户控件的实例并打印它

我在执行序列中遇到了一个问题,导致Print按钮打印usercontrol时没有数据,也就是说,它是在异步方法完成之前执行的

我的代码如下:

用户控制:

单击“打印”时,将创建ManagerContact用户控件的一个新实例,并通过用户控件中的所有函数执行,直到到达行

   var response = await service.RetrieveMultiple(query);
然后返回打印按钮功能,继续打印页面。问题是它跳过了我用数据填充表单控件的其余函数,因此表单打印时没有数据


我需要找到一种方法来强制执行等待响应返回,并且只有在它得到响应后,执行才会返回到主页,以查看打印按钮的其余部分

您的问题是由于
async void
造成的。作为一般准则,避免
异步无效
;它应仅用于事件处理程序。有关更多信息,请参阅我的

因此,您的
getData
方法应该如下所示:

private async Task getDataAsync(string contactid)
private async void PrintOrExport(object sender, RoutedEventArgs e)
{
  ManagerContact mymanager = await Common.ManagerContact.CreateAsync(mycontactid);
  ...
}
无论调用什么,它都应该等待它返回的
任务,这意味着该函数还需要是
异步的
并返回
任务
任务
,等等

最终,您会发现您的构造函数不能是异步的,因此我建议您创建一个异步工厂方法:


您的问题是由于
async void
引起的。作为一般准则,避免
异步无效
;它应仅用于事件处理程序。有关更多信息,请参阅我的

因此,您的
getData
方法应该如下所示:

private async Task getDataAsync(string contactid)
private async void PrintOrExport(object sender, RoutedEventArgs e)
{
  ManagerContact mymanager = await Common.ManagerContact.CreateAsync(mycontactid);
  ...
}
无论调用什么,它都应该等待它返回的
任务,这意味着该函数还需要是
异步的
并返回
任务
任务
,等等

最终,您会发现您的构造函数不能是异步的,因此我建议您创建一个异步工厂方法:


您的问题是由于
async void
引起的。作为一般准则,避免
异步无效
;它应仅用于事件处理程序。有关更多信息,请参阅我的

因此,您的
getData
方法应该如下所示:

private async Task getDataAsync(string contactid)
private async void PrintOrExport(object sender, RoutedEventArgs e)
{
  ManagerContact mymanager = await Common.ManagerContact.CreateAsync(mycontactid);
  ...
}
无论调用什么,它都应该等待它返回的
任务,这意味着该函数还需要是
异步的
并返回
任务
任务
,等等

最终,您会发现您的构造函数不能是异步的,因此我建议您创建一个异步工厂方法:


您的问题是由于
async void
引起的。作为一般准则,避免
异步无效
;它应仅用于事件处理程序。有关更多信息,请参阅我的

因此,您的
getData
方法应该如下所示:

private async Task getDataAsync(string contactid)
private async void PrintOrExport(object sender, RoutedEventArgs e)
{
  ManagerContact mymanager = await Common.ManagerContact.CreateAsync(mycontactid);
  ...
}
无论调用什么,它都应该等待它返回的
任务,这意味着该函数还需要是
异步的
并返回
任务
任务
,等等

最终,您会发现您的构造函数不能是异步的,因此我建议您创建一个异步工厂方法:


您确定要异步执行代码吗?嗯,我没有其他选择。这是我将Silverlight与CRM服务结合使用的唯一方法。您确定要异步执行代码吗?嗯,我没有其他选择。这是我将Silverlight与CRM服务结合使用的唯一方法。您确定要异步执行代码吗?嗯,我没有其他选择。这是我将Silverlight与CRM服务结合使用的唯一方法。您确定要异步执行代码吗?嗯,我没有其他选择。这是我将Silverlight与CRM服务结合使用的唯一方法。这就是我所寻找的。非常感谢:)这就是我要找的。非常感谢:)这就是我要找的。非常感谢:)这就是我要找的。非常感谢:)