0

从 INGO RAMMER 的“Advanced .NET Remoting”中学习,我尝试使用以下代码向客户端触发事件:

foreach (Delegate del in MessageArrived.GetInvocationList()) 
{
try 
{
mah = (MessageArrivedHandler) del;
mah(msg);
} 
catch (Exception e) 
{
Console.WriteLine("Exception occured, will remove Delegate");
MessageArrived -= mah;
}
}

当我在客户端模拟网络问题时,客户端的委托按预期被 -= 删除,并且 MessageArrived 变为空。

但是随着网络恢复,客户端将尝试连接,获取远程对象并重新注册事件,就像启动时一样,似乎重新注册成功,因为 MessageArrived 不为空。

问题是我仍然得到异常会调用然后被删除的委托。据我了解,这不会引起期望。客户端再次在线并且 re-connect() 和 connect() 方法共享相同的代码...

有谁能够帮我?

4

1 回答 1

0

检查事件的注销是否正确发生。当客户端断开连接时,最好优雅地取消注册事件。

于 2009-08-04T10:28:01.207 回答