0

我有一个web.config文件,我想解析它以防它发生变化。为此,我使用FileSystemWatcherIDictionary集合。这是我的方法的代码:

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()]);
  }
}

_ dictMonitorObject,用于锁定;ConfigurationParameter是枚举,用于定义键名。当引发FileSystemWatcher更改事件时调用此方法。问题是程序执行在 _ dictionary.Clear();上停止。锁定(dictMonitor);没有例外。调试时,手动调用我的方法ReadCurrentConfiguration执行良好 - 它正常清理字典并填充新值。但在事件引发的情况下,它会停止。此外,如果将执行传递给clear()方法,调试器将显示以下消息而不是 _字典值:_字典计数 = 无法评估表达式,因为代码已优化或本机框架位于调用堆栈顶部。谁能建议为什么会出现这个问题?

4

2 回答 2

0

也许你的循环中的某些东西会导致事件再次发生,从而导致无限循环。

尝试这样的事情:

private bool _isExecuting = false;
public void ReadCurrentConfiguration()
{
    if (_isExecuting)
        return;

    _isExecuting = true;
    var settings = System.Configuration.ConfigurationManager.AppSettings;
    //......
    _isExecuting = false;
}
于 2012-08-28T07:05:22.100 回答
0

一段时间后,我明白了问题的原因——更改为web.config使 IIS 重新启动应用程序,所以上面的实现很荒谬。这很可能是“挂起”线程的原因。

于 2014-06-15T16:50:25.153 回答