3
工作,我的代碼來設置我的Rx進行連接下列位:在Silverlight中使用的Rx爲WCF調用不TakeUntil
事件相關的定義:
public class QueryEventArgs : EventArgs
{
public SomeParametersType SomeParameters
{
get;
set;
}
public object QueryContext
{
get;
set;
}
};
public delegate void QueryDelegate(object sender, QueryEventArgs e);
public event QueryDelegate QueryEvent;
初始化:
queryObservable = Observable.FromEvent<QueryEventArgs>(this, "QueryEvent");
queryObservable.Subscribe((e) =>
{
tbQueryProgress.Text = "Querying... ";
client.QueryAsync(e.EventArgs.SomeParameters, e.EventArgs.QueryContext);
});
queryCompletedObservable = from e in Observable.FromEvent<QueryCompletedEventArgs>(client, "QueryCompleted").TakeUntil(queryObservable) select e;
queryCompletedObservable.Subscribe((e) =>
{
tbQueryProgress.Text = "Ready";
SilverlightClientService_QueryCompleted(e.Sender, e.EventArgs);
},
(Exception ex) =>
{
SetError("Query error: " + ex);
}
);
「客戶端」是WCF客戶端,其他所有內容都是不言自明的。
「TakeUntil」可以阻止用戶在當前正在運行的中間進行新查詢時自行踩踏自己。但是,如果我刪除了「TakeUntil」子句,而代碼正常工作,那麼如果將其放入,則查詢將永遠不會完成。
這是正確的模式?如果是這樣,我做錯了什麼?
乾杯, -Tim
非常感謝您的快速回答,但我不知道我理解你的警告......如果新的查詢終止與該「開關」之前的查詢,你會怎麼弄,那裏有多個查詢的情況下? – Tim 2011-01-19 23:40:33