C# Silverlight正在等待异步调用
我有一个silverlight应用程序,它在启动时需要读取Web服务返回的配置文件 所以,在我的主页上,我想要这样的东西:C# Silverlight正在等待异步调用,c#,.net,silverlight,wcf,C#,.net,Silverlight,Wcf,我有一个silverlight应用程序,它在启动时需要读取Web服务返回的配置文件 所以,在我的主页上,我想要这样的东西: public MainPage() { InitializeComponent(); Config cfg = new Config(); XDocument config = cfg.getConfig(); //doing stuff with config here ... } cfg.getConfig( fcnToCall
public MainPage()
{
InitializeComponent();
Config cfg = new Config();
XDocument config = cfg.getConfig();
//doing stuff with config here
...
}
cfg.getConfig( fcnToCall );
config的构造函数调用readConfigAsnc,我有一个readcompleted方法返回xdocument。我希望在MainPage()中继续执行之前调用readConfigCompleted。做这件事最好的方法是什么?为什么不把这些方法分开呢?不要让所有这些都发生在MainPage()中,而是让“Do Stuff”发生在GetConfigCompleted事件中。最好的方法是将其分为两种方法。将函数作为getConfig的参数传递,如下所示:
public MainPage()
{
InitializeComponent();
Config cfg = new Config();
XDocument config = cfg.getConfig();
//doing stuff with config here
...
}
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();
Config cfg=new Config();
cfg.Callback+=新操作Action=s=>
{
XDocument cfg=s作为XDocument;
//在这里使用配置做一些事情。。。
};
getConfig();
我想处理的大部分事情都在主页上。像UI元素之类。Silverlight最强大的部分是它的数据绑定…我敢打赌,您可以将您试图操作的大多数内容绑定到视图模型,从而提高项目的可维护性。如何将XDocument config参数传递给fcnToCall?现在,getConfig返回XDocument config对象。需要修改getConfig(…)调用以接受委托。完成后,应调用该委托。您可以查看我的编辑,以获取设置接受一个参数的委托的示例(操作是默认的接受该参数的委托)。或者,您可以只执行我的第二个操作并使用lambda表达式。看起来您只有一个示例?两者的分离在哪里?一个使用lambda表达式,另一个只作为委托传递函数。它们都做相同的事情,但我喜欢lambda表达式(如果您不熟悉它们,请查找它们,它们非常有用。)