【发布时间】:2011-01-19 22:48:57
【问题描述】:
我有以下代码来设置我的 Rx 连接:
事件相关定义:
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);
}
);
“client”是 WCF 客户端,其他所有内容都非常不言自明。
“TakeUntil”用于阻止用户在当前正在运行的查询中执行新查询时踩踏自己。但是,如果我删除“TakeUntil”子句,代码可以工作,但如果我把它放进去,查询永远不会完成。
这是正确的模式吗?如果是这样,我是不是做错了什么?
干杯, -蒂姆
【问题讨论】:
标签: silverlight wcf system.reactive