2009-07-27 3 views
0

Учится ИНГО трамбовки «Advanced .NET Remoting», я пытался использовать следующие коды для стрельбы события клиентов:события Проблема в .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 не был нулевым.

Проблема в том, что я все еще получаю исключение, вызывает делегат, который был удален. Насколько я понимаю, это не должно увеличивать расходы. клиент снова подключен и повторно подключается(), а метод connect() использует те же коды ...

Может кто-нибудь мне помочь?

ответ

0

Проверьте, не происходит ли нарушение регистрации событий или нет. Когда клиент отключен, желательно отменить учет событий изящно.