1

多数の EventLog オブジェクトを含む Hashtable があります。私の FormClosed イベントでは、これらのオブジェクトを破棄できるようにそれらを反復処理する必要がありますが、最初のキーでフォーカスがフォームに戻り、メソッドが終了しません (フォームが閉じません)。なぜこれを行っているのですか/このアプローチの何が問題なのですか?

private void Main_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e)
    {
        // There will probably be lots of stuff that we'll need to dispose of when closing
        if (servers.Count > 0)
        {
            foreach (string key in servers)
            {
                try
                {
                    EventLog el = (EventLog)servers[key];
                    el.Dispose();
                }
                catch { }
            }
        }
    }
4

2 に答える 2

4

イテレータのHashtableキーと値のペアを繰り返します。キーを反復処理する場合は、コードを次のように変更します。

foreach (string key in servers.Keys)

Hashtable下位互換性のために必要な場合にのみ使用してください。.NET 2.0 以降では、Dictionary<K,T>代わりに使用してください。

于 2012-08-28T15:59:04.847 に答える
0

このコードで試すことができます

 private void Main_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e)
        {
            // There will probably be lots of stuff that we'll need to dispose of when closing
            if (servers.Count > 0)
            {
                foreach (string key in servers.Keys)
                {
                    try
                    {
                        EventLog el = (EventLog)servers[key];
                        el.Dispose();
                    }
                    catch(Exception ex) 
                    {
                        EventLog.WriteEntry(ex.Message); 
                        throw ex;
                    }
                }
            }
        }
于 2012-08-28T16:00:21.777 に答える