我试图创建一个通用函数,它应该将一些线程描述为windows事件日志中的不同内部方法。所以我写道:
void SubScribeToEventLogEvent(string EventLog,int EventID,string Source, Action named ="myMethod")
{
string query = "*[System/Level=8] and [System/EventID=" +EventID.ToString()+"]";
EventLogQuery subscriptionQuery = new EventLogQuery(EventLog, PathType.LogName, "*[System/Level=8]");
EventLogWatcher watcher = new EventLogWatcher(subscriptionQuery);
watcher.EventRecordWritten += new EventHandler<EventRecordWrittenEventArgs>(named);
watcher.Enabled = true;
}
然后我为特定事件触发了一些功能
private void myMethod(object obj,EventRecordWrittenEventArgs arg)
{
//do something
if (arg.EventRecord != null)
{
MessageBox.Show(arg.EventRecord.Id.ToString() + arg.EventRecord.FormatDescription());
Console.WriteLine("Received event {0} from the subscription.", arg.EventRecord.Id);
Console.WriteLine("Description: {0}", arg.EventRecord.FormatDescription());
}
else
{
Console.WriteLine("The event instance was null.");
}
}
所以在我的主要内容中,我可以简单地写一下
SubScribeToEventLogEvent(EventlogName,200,myMethod);
然而它没有缝合工作,我在.net 4.0编码,我相信Action是一个保留的方法词来做这些事情。但是我得到一个错误(代码第一行中已经命名的红线):
SubScribeToEventLogEvent(string EventLog,int EventID,string Source, Action named ="myMethod")
显然它不能分配一个字符串值(但还有什么?),如果我删除字符串值,它仍然无法在Eventhandler函数中识别。