web.configファイルがあり、変更された場合に解析したいと思います。この目的のために、FileSystemWatcherとIDictionaryコレクションを使用します。これが私のメソッドのコードです:
public void ReadCurrentConfiguration()
{
var settings = System.Configuration.ConfigurationManager.AppSettings;
lock (_dictMonitor)
{
if (_dictionary.Count != 0)
_dictionary.Clear();
foreach (var elem in Enum.GetValues(typeof(ConfigurationParameter)).Cast<ConfigurationParameter>())
_dictionary.Add(elem.ToString(), settings[elem.ToString()]);
}
}
_ dictMonitorはオブジェクトであり、ロックに使用されます。ConfigurationParameterは列挙型であり、キー名を定義するために使用されます。このメソッドは、FileSystemWatcherの変更イベントが発生しているときに呼び出されます。問題は、プログラムの実行が_dictionary.Clear ();のいずれかで停止することです。またはlock(dictMonitor); 例外なし。デバッグ時に、メソッドReadCurrentConfigurationを手動で呼び出すと、正常に実行されます。これにより、ディクショナリが正常にクリーンアップされ、新しい値が入力されます。ただし、イベント発生の場合は停止します。また、実行がclear()メソッドに渡されると、デバッガーは_ディクショナリ値の代わりに次のメッセージを表示します。辞書カウント=コードが最適化されているか、ネイティブフレームが呼び出しスタックの最上位にあるため、式を評価できません。この問題が発生する理由を誰かが提案できますか?