2016-02-28 53 views

回答

0

不幸的是,这是不可能的。

甚至认为事情已经在API方面发生了一些变化,因为我提到的博客文章,但原则保持不变。 参见文档+样品:

https://msdn.microsoft.com/en-us/library/650k61tw(v=vs.100).aspx

https://msdn.microsoft.com/en-us/library/system.diagnostics.eventinstance.categoryid(v=vs.100).aspx

https://msdn.microsoft.com/en-us/library/system.diagnostics.eventloginstaller.categoryresourcefile(v=vs.100).aspx

我找到可接受的解决方法本;使用不同的源ID,而不是categoryId。它更简单,可以用简单的API完成。

示例: 自行管理事件源,为每个类别类型创建事件源。通过运行

if (!EventLog.SourceExists(sourceName)) 
{ 
    lock (_eventSourceCreationLock) 
    { 
     if (!EventLog.SourceExists(sourceName)) 
     { 
      EventLog.CreateEventSource(sourceName, _logName); 
     } 
    } 
} 

,然后使用一些懒惰的创作逻辑,例如,用这个来写每源每个日志条目:

EventLog.WriteEntry(sourceName, description, type, id); 

这些样品都是线程安全的同时,为静态调用创建新的内部事件日志。

EventLog的实例方法不保证是线程安全的。