2011-11-29 254 views
0

我有一个silverlight应用程序启动它,它需要读取一个web服务返回的配置文件。Silverlight等待异步调用

所以,在我的主页,我想是这样的:

public MainPage() 
{ 
    InitializeComponent(); 
    Config cfg = new Config(); 
    XDocument config = cfg.getConfig(); 
    //doing stuff with config here 
    ... 
} 

的构造函数调用配置和readConfigAsnc我有一个方法的readcompleted,返回的XDocument。我想在执行继续MainPage()之前调用readConfigCompleted。做这件事的最好方法是什么?

回答

4

最好的办法是把它分成两种方法。通过一个功能了getconfig的参数,所以这样的:

cfg.getConfig(fcnToCall); 

后来,在你的代码,

void fcnToCall(XDocument config) 
{ 
    //Do stuff with config here... 
} 

另一种选择是,如果你想保留使用lambda表达式你的局部变量:

Config cfg = new Config(); 
cfg.Callback += new Action<XDocument> action = s => 
     { 
      XDocument cfg = s as XDocument; 
      //Do stuff with config here... 
     }; 
cfg.getConfig(); 
+0

如何将XDocument配置参数传递给fcnToCall?现在,getConfig返回XDocument配置对象。 – Justin

+0

您的getConfig(...)调用需要修改以接受委托。完成后,它应该调用该代理。您可以查看我的编辑,以了解设置接受一个参数的委托的示例(动作是一种默认的接受参数)。 – DanTheMan

+0

或者,你可以做我的第二个,并使用lambda表达式。 – DanTheMan

3

为什么不分离出这些方法?而不是在MainPage()中发生所有这些,在GetConfigCompleted事件中发生'Do Stuff'。

+0

我想做的东西的大部分事情都在mainpage中。像UI元素等。 – Justin

+0

Silverlight中最强大的部分是它的数据绑定......我敢打赌,你可以将大部分你试图操作的东西绑定到你的视图模型,从而增加你的项目的可维护性。 –