Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Silverlight正在等待异步调用_C#_.net_Silverlight_Wcf - Fatal编程技术网

C# Silverlight正在等待异步调用

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

我有一个silverlight应用程序,它在启动时需要读取Web服务返回的配置文件

所以,在我的主页上,我想要这样的东西:

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表达式(如果您不熟悉它们,请查找它们,它们非常有用。)