在我的 silverlight 应用程序中,我将一个方法传递给Repository 类GetListCallBack
中另一个方法的委托参数,该方法GetEmployees
将该委托作为事件处理程序附加到异步服务调用的已完成事件。
EmpViewModel 类:
public class EmpViewModel
{
private IRepository EMPRepository = null;
//constructor
public EmpViewModel
{
this.EMPRepository= new Repository();
}
public void GetList()
{
this.EMPRepository.GetEmployees(xyz, this.GetListCallBack);
}
public void GetAnotherList()
{
this.EMPRepository.GetEmployees(pqr, this.GetAnotherListCallBack);
}
private void GetListCallBack(object sender, GetListCompletedEventArgs args)
{
if (args.Error == null)
{
this.collection1.Clear();
this.collection1 = args.Result;
}
else
{
//do sth
}
}
public void GetAnotherListCallback(object sender, GetListCompletedEventArgs args)
{
//do sth with collection1
}
}
存储库类:
public class Repository : IRepository
{
private readonly ServiceClient _client=null ;
public Repository()
{
_client = new ServiceClient(Binding, Endpoint);
}
public void GetEmployees(int xyz, EventHandler<GetListCompletedEventArgs> eventHandler)
{
_client.GetListCompleted -= eventHandler;
_client.GetListCompleted += new EventHandler<GetListCompletedEventArgs>(eventHandler);
_client.GetListAsync(xyz);
}
}
现在,当对该方法的调用GetList()
完成后,如果我GetAnotherList()
在同一个类中调用另一个方法EmpViewModel
,那么GetListCallBack
方法会在被调用之前再次GetAnotherListCallBack
被调用。
这可能是因为两种方法都订阅了该事件。
如您所见,我已从回调事件中明确取消订阅事件处理程序,但事件处理程序仍在被调用。谁能建议我哪里出错了?
编辑:
当我使用局部变量而不是使用this.EMPRepository
来调用该Repository
方法时,它运行良好,因为两个 CallBack 方法都传递给了不同的Repository
类实例,并且只有附加的 CallBack 方法被触发
public class EmpViewModel
{
public void GetList()
{
EMPRepository = new Repository();
EMPRepository.GetEmployees(xyz, this.GetListCallBack);
}
public void GetAnotherList()
{
EMPRepository = new Repository();
EMPRepository.GetEmployees(pqr, this.GetAnotherListCallBack);
}
--------