如何在加载silverlight应用程序之前完成异步调用

时间:2011-11-30 20:14:10

标签: silverlight silverlight-4.0

我有一个使用WCF的silverlight应用程序,我想在加载usercontrol之前进行WCF调用以加载一些数据,以便我可以将数据与自动完成框一起使用。有关如何实现这一目标的任何建议吗?

3 个答案:

答案 0 :(得分:1)

不确定您的用户界面是否适合使用加载指示器或进度条。如果您可以使用加载指示器,那么在异步调用正在进行时显示忙/加载指示符可能是一个不错的选择。这将禁止用户在从WCF服务检索数据时单击下拉列表或任何其他控件。

答案 1 :(得分:0)

您可以在Application_Startup()文件的App.xaml.cs方法中执行异步调用,并在异步回调中设置RootVisual,而不是Application_Startup()

答案 2 :(得分:0)

Silverlight中的所有WCF服务调用都是异步的。我学会了使用Lambdas和一个非常有用的类Action(它是事件和委托的包装器)。 使用RobSiklos建议的应用程序启动可以在显示控件之前获得它。这显示了代码也可以在userControl加载的事件中工作,包含加载覆盖(您可以使用带有居中文本的边框,遍历整个应用程序或Silverlight工具包控件)。这种方法可以为用户提供更直接的反馈,特别是如果您的数据服务呼叫需要更长的时间。

public MyUserControl : UserControl
{

 public MyUserControl()
 {
  this.Loaded += new RoutedEventHandler(View_Loaded);
 }

 void View_Loaded(object sender, RoutedEventArgs e)
 {
  // start showing loading overlay
  MyService service = new Service(...);
  service.GetDataCompleted += (o, args) =>
  {
    var data = args.Results;
    // hide loading overlay
  }
 }
}