我想将参数传递给Web方法的事件处理程序。我添加了一个自动取消订阅逻辑,以避免事件处理程序多次被触发。问题是我总是在事件处理方法中获得相同的EventArgs对象实例。
ie:如果我使用3个不同的值为infoVersion调用GetInfo 3次,事件处理函数会被触发3次,但我将始终获得变量e的相同实例。
public void GetInfo(int infoVersion)
{
System.EventHandler<ServiceReference.getInfoCompletedEventArgs> handler = null;
handler = (sender, e) =>
{
client.getInfoCompleted -= handler;
client_getInfoCompleted(sender, e, infoVersion);
};
client.getInfoCompleted += handler;
client.getInfoAsync(infoVersion);
}
void client_getInfoCompleted(object sender, ServiceReference.getInfoCompletedEventArgs e, int infoVersion)
{
//do something with e.result and infoVersion
//e.result is always the same but infoVersion is correct
}
编辑:网络方法已经过测试并且运行正常。如果我修改了infoVersion值,e.result将会改变。
如果我使用下面更简单的方法,e.result每次都会有所不同:
public void GetInfo(int infoVersion)
{
client.getInfoCompleted += client_getInfoCompleted;
client.getInfoAsync(infoVersion);
}
void client_getInfoCompleted(object sender, ServiceReference.getInfoCompletedEventArgs e)
{
//e.result has a different value each time.
}
答案 0 :(得分:1)
要解决此问题,您可以为每个调用创建一个客户端,以便事件不会相互交叉。
更好的解决方案是使用异步API来接收每次调用的回调。如果这是一个自动生成的代理类,您可以使它生成这些方法。
注意:这需要.Net 4.5