使用MS Enterprise Library Logger记录时,我开始收到此错误。
日志记录机制使我对日志条目进行排队,然后使用计时器每10秒刷新一次条目。
它工作正常一段时间,但今天这个错误开始显现:
代码行:
Logger.Write(list[i]);
错误讯息:
Object synchronization method was called from an unsynchronized block of code.
堆栈追踪:
at Microsoft.Practices.Unity.SynchronizedLifetimeManager.TryExit()
整个计时器elsapsed事件处理程序:
private void TimerElapsed(object sender, ElapsedEventArgs e)
{
// Lock and free free the queue quickly - write to an intermediate list.
var list = new List<LogEntry>();
lock (LogEntryQueueLock)
{
while (true)
{
if (_logEntryQueue.Count <= 0)
break;
//dequeue the LogEntry that will be written to the log
list.Add(_logEntryQueue.Dequeue());
}
}
// Flush the list in to the log
for (int i = 0; i < list.Count; i++)
{
ProcessEntry(list[i]); // Strip commas from the string
Logger.Write(list[i]); // <<<== ERRORS HERE
}
}
非常感谢任何建议!
[编辑]:我试图调用Logger.Write direclty,没有计时器已经过去的事件 - 同样的问题......
答案 0 :(得分:3)
这看起来是一个现有问题:http://unity.codeplex.com/workitem/7206。
好消息是,这应该通过版本2.1.505.2解决,您可以访问:http://nuget.org/packages/Unity/2.1.505.2。