2011-11-29 255 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中最強大的部分是它的數據綁定......我敢打賭,你可以將大部分你試圖操作的東西綁定到你的視圖模型,從而增加你的項目的可維護性。 –