Avevo pensato di utilizzare un thread che controlla se l'utente non scrive messaggi da pių di 60 secondi e se questa condizione č verificata, l'utente viene disconnesso e la classe dell'utente viene eliminata con il garbage collection ...

con questo codice:
codice:
    internal void ThreadedCheckEachPacketTiming()
    {
        double TimeToAdd = 60;
        while (true)
        {
            Console.WriteLine("Ricerca utenti inattivi");
            System.Threading.Thread.Sleep(60000);
            System.Collections.Hashtable TmpHashtable = (System.Collections.Hashtable)SocketManager.activeSockets.Clone();
            System.Collections.IEnumerator myEnum = TmpHashtable.GetEnumerator();
            while (myEnum.MoveNext())
            {
                System.Collections.DictionaryEntry de = (System.Collections.DictionaryEntry)myEnum.Current;
                Client user = (Client)de.Value;
                DateTime dtWhenItRunsOut = user._TimeLastPacket.AddSeconds(TimeToAdd);
                if (DateTime.Now.CompareTo(dtWhenItRunsOut) == 1) // Timed out!
                {
                    Console.WriteLine("User on socket ID '" + user._MySocketID + "' timed out");
                    try
                    {
                        user.DropConnection();
                    }
                    catch { }
                }
            }
            TmpHashtable = null;
            GC.Collect();
        }
    }

Ma non mi funziona

La classe non viene eliminata
La funzione:
codice:
    ~Client()
    {
        Log.Write("Woo Class Destroyed! :)");
    }
Non viene eseguita quindi credo che la classe non venga eliminata

E cosa pių importante non viene liberata memoria