Wcf 防止MVVM ServiceAgent事件多次挂接
开发与WCF服务通信的Silverlight应用程序 MVVM->ServiceAgent->WCF服务 因此,在我的ViewModel中,我有:Wcf 防止MVVM ServiceAgent事件多次挂接,wcf,events,mvvm,Wcf,Events,Mvvm,开发与WCF服务通信的Silverlight应用程序 MVVM->ServiceAgent->WCF服务 因此,在我的ViewModel中,我有: ServiceAgent.SearchExternalPatients(Name, (s, e) => { ExternalPatients = e.Result; }); 在我的服务代理中,我有: public voi
ServiceAgent.SearchExternalPatients(Name, (s, e) =>
{
ExternalPatients = e.Result;
});
在我的服务代理中,我有:
public void SearchExternalPatients(string name, EventHandler<SearchPatientExternalCompletedEventArgs> callback)
{
_proxy.SearchPatientExternalCompleted += callback;
_proxy.SearchPatientExternalAsync(name);
}
public void SearchExternalPatients(字符串名称,EventHandler回调)
{
_proxy.searchPatientTexternalCompleted+=回调;
_proxy.searchPatientTexternalAsync(名称);
}
问题是每次我点击搜索按钮时,它都会再次连接事件,当我返回结果时,我会多次收到它
在MVVM ServiceAgent模式中,解除这些事件锁定的最佳方式是什么?您是否可以利用反应式扩展来实现这一点?我在Silverlight方面做得不多,但RX可以缓解与事件挂钩/取消挂钩相关的许多痛苦。类似的东西。这样做:
public void SearchExternalPatients(string name, EventHandler<SearchPatientExternalCompletedEventArgs> callback)
{
EventHandler<SearchPatientExternalCompletedEventArgs> wrapper = null;
wrapper = (s, e) =>
{
callback(s, e);
_proxy.SearchPatientExternalCompleted -= wrapper;
}
_proxy.SearchPatientExternalCompleted += wrapper;
_proxy.SearchPatientExternalAsync(name);
}
public void SearchExternalPatients(字符串名称,EventHandler回调)
{
EventHandler包装器=null;
包装器=(s,e)=>
{
(s,e);
_proxy.searchPatientTexternalCompleted-=包装器;
}
_proxy.searchPatientTexternalCompleted+=包装器;
_proxy.searchPatientTexternalAsync(名称);
}
您可能会从编译器、ReSharper或Visual Studio的静态代码分析(取决于每个的设置)中得到警告,因为lambda正在访问在lambda外部修改的变量,但这应该可以正常工作。虽然我不明白为什么您首先会这样考虑代码。如果我在“\u proxy.searchPatientTexternalCompleted-=callback;”之前放置一个“\u proxy.searchPatientTexternalCompleted-=callback;”就解决了问题。但这是最好的方法吗?只要回调在每次调用中都是相同的委托,这种方法就可以工作,很可能是这样。但是你想依靠这个巧合吗?