我使用wcf服務客戶端提交silverlight項目的數據更改。的相關性的代碼是這樣的:如何確保wcf服務客戶端在Silverlight中完成他的作品?
public class DispatcherCollection : UpdatableCollection<DocumentDispatcher>
{
public override void SubmitChanges()
{
DocumentServiceClient client = new DocumentServiceClient();
client.NewDocumentCompleted += (s, e) =>
{
// (s as DocumentServiceClient).CloseAsync();
// do something
};
client.UpdateColumnCompleted += (s, e) =>
{
// (s as DocumentServiceClient).CloseAsync();
// do something
};
client.RemoveDocumentCompleted += (s, e) =>
{
// (s as DocumentServiceClient).CloseAsync();
// do something
};
foreach (DocumentDispatcher d in this)
{
if (d.IsNew)
{
// d=>object[] data
client.NewDocumentAsync(data);
d.IsNew=false;
}
else
{
foreach (string propertyName in d.modifiedProperties)
{
client.UpdateColumnAsync(d.ID, GetPropertyValue(propertyName));
}
dd.ClearModifications();
}
}
foreach (DocumentDispatcher dd in removedItems)
{
client.RemoveDocumentAsync(dd.ID);
}
removedItems.Clear();
}
}
類UpdatableCollection從ObserableCollection導出,並且我implemtent類DocumentDispatcher和UpdatableCollection邏輯緩衝,如新創建的,屬性修改和移除數據的變化。我使用SubmitChanges方法將所有更改提交給服務器。
現在我被卡住了: 1.在完成異步呼叫後關閉客戶端時,我不知所措。我不知道哪個回調是最後一個回調。 2.當用戶點擊保存按鈕後立即關閉IE時會發生什麼(這似乎是因爲它運行異步,但事實上更新線程正在努力運行)。