Zauwazylem, ze jestes ta sama osoba, ktora napisala post o watkach i timerach.
W System.Timers.Timer, jesli wyjatek wysetpuje w zdarzeniu Elapsed, jest duszony i nie wypuszczany na zewnatrz. Dlatego moze Ci sie wydawac, ze nie leci, pomimo tego, ze w rzeczywistosci leci ;)
Cytat:
In the .NET Framework version 2.0 and earlier, the Timer component catches and suppresses all exceptions thrown by event handlers for the Elapsed event. This behavior is subject to change in future releases of the .NET Framework.
Zrodlo: System.Timers.Timer
Moze tutaj lezy Twoj problem?
EDIT:
Wywolaj Socket.Shutdown(SocketShutdown.Both); zanim wywolasz Close();