也许这是一个愚蠢的问题,但是事件监听器是否像计时器一样使用CPU周期,或者在事件被触发之前它们是否处于非活动状态?
是语言特定的,还是所有语言都基本相同?
我想编写一个小型服务,只有在触发网络断开连接事件时才会执行任何操作,并且我不希望服务只是在监听时使用资源(当然不是内存)。
我打算做这样的事情
using NetworkUtilities;
ManagementEventWatcher networkAdapterArrivalWatcher = new ManagementEventWatcher("\\root\\wmi","SELECT * FROM MSNdis_NotifyAdapterArrival ");
networkAdapterArrivalWatcher.Options.Timeout = new TimeSpan(0,0,5);
ManagementEventWatcher networkAdapterRemovalWatcher = new ManagementEventWatcher("\\root\\wmi","SELECT * FROM MSNdis_NotifyAdapterRemoval " );
networkAdapterRemovalWatcher.Options.Timeout = new TimeSpan(0,0,5);
ConnectionNotifierHandler handler = new ConnectionNotifierHandler();
networkAdapterArrivalWatcher.EventArrived += new EventArrivedEventHandler(handler.Arrived);
networkAdapterRemovalWatcher.EventArrived += new EventArrivedEventHandler(handler.Removed);
//Start watching for events
networkAdapterArrivalWatcher.Start();
networkAdapterRemovalWatcher.Start();
public void Arrived(object sender, EventArrivedEventArgs e)
{
using (ManagementBaseObject ev = e.NewEvent)
{
//Log the event
}
}
public void Removed(object sender, EventArrivedEventArgs e)
{
using (ManagementBaseObject ev = e.NewEvent)
{
//Log the event
}
}
答案 0 :(得分:2)
在C#中,事件只是函数委托(指向函数的指针),它将被称为“按需”并且不会使用任何额外的CPU周期。
但是,如果您指的是监控事件,例如:
OnConnecitonPending
用于某些套接字侦听器。OnWindowMessage
用于窗口应用程序。我认为那些肯定会使用一个线程来监控他们的事件,当然会耗费额外的CPU。
答案 1 :(得分:1)
事件监听器在实际触发事件之前不会使用任何CPU时间(并且会调用您的事件处理程序)。
事件监听器没有涉及后台进程。
答案 2 :(得分:1)
通常,符合内置事件监听系统的事件侦听器在触发事件之前不会使用CPU时间。相反,它们是由事件触发的委托。系统注意到他们对此事件的兴趣。这是最明显的,例如,使用Objective-C / Cocoa风格的代表,但该原则几乎适用于所有地方。