2011-06-12 86 views
2

在Silverlight中面臨一些調用方法的問題。 這裏是場景: -在MVVM silverlight中調用異步方法

我的服務代理包含調用WCF服務中的方法。我打電話的方式是這樣的:

public void GetMethod(EventHandler<GetMethodCompletedEventArgs> callback) 
    { 
     _Proxy.GetMethodCompleted += callback; 
     _Proxy.GetMethodAsync(); 
    } 

我打電話視圖模型這種方法是這樣

private void SomeMethod() 
{ 
ServiceAgent.GetMethod(inputVariable, new EventHandler<GetMethodCompletedEventArgs>(OnGetMethod_Completed)); 
} 

void OnGetMethod_Completed(GetMethodCompletedEventArgs e) 
{ 
int result = e.Result; 
} 

我重視在視圖模型方法在UI按鈕。

現在的問題是,如果我第一次按下按鈕一切正常,如果我按兩次OnGetMethod_Completed()獲取執行2次一個按鈕單擊(即第二個按鈕單擊),當我按下第三時間它被執行3次,依此類推...... 我真的不明白爲什麼會發生這種情況,如果有人這樣做,請幫助我。

在此先感謝

回答

3

您需要完成的事件來註銷您OnGetMethod_Completed

void OnGetMethod_Completed(GetMethodCompletedEventArgs e) 
{ 
    int result = e.Result; 
    _Proxy.GetMethodCompleted -= OnGetMethod_Completed 
} 
+0

僅供參考 - 不建議始終保持代理存活,只保留代理工廠(渠道工廠) – 2011-06-12 07:04:42

0

對於是異步調用,你需要避免後續調用發生之前,而不是在一月底可能漫長的過程。否則,你仍然可以很高興地觸發多個事件。雖然除第一個以外的所有結果都將被忽略,但您仍然向服務器發送/從服務器發送數據(最好避免)。

您實際上只想在處理過程中禁用按鈕或其他GUI元素。這是使用BusyIndi​​cator的理想場所,但只需將按鈕的啓用狀態綁定到處理狀態通常就足夠了。