/// <summary> /// 전원 상태 감지 시스템을 초기화하고 시작합니다. /// 처음 한 번만 호출하거나, Stop()을 먼저 호출한 후에 호출해야 합니다. /// </summary> public void InitPowerEvents() { var q = new WqlEventQuery(); q.EventClassName = "Win32_PowerManagementEvent"; managementEventWatcher = new ManagementEventWatcher(q); managementEventWatcher.EventArrived += PowerEventArrive; if (OnPowerSuspend != null) { foreach (Delegate d in OnPowerSuspend.GetInvocationList()) { OnPowerSuspend -= (PowerEvent)d; } } if (OnPowerResume != null) { foreach (Delegate d in OnPowerResume.GetInvocationList()) { OnPowerResume -= (PowerEvent)d; } } managementEventWatcher.Start(); //SystemEvents.PowerModeChanged += OnPowerChange; }
private void PowerEventArrive(object sender, EventArrivedEventArgs e) { foreach (PropertyData pd in e.NewEvent.Properties) { if (pd == null || pd.Value == null) { continue; } var name = powerValues.ContainsKey(pd.Value.ToString()) ? powerValues[pd.Value.ToString()] : pd.Value.ToString(); Console.WriteLine("PowerEvent:" + name); if (pd.Value.ToString() == "4" && OnPowerSuspend != null && OnPowerSuspend.GetInvocationList().Length > 0) { OnPowerSuspend(); } else if (pd.Value.ToString() == "7" && OnPowerResume != null && OnPowerResume.GetInvocationList().Length > 0) { OnPowerResume(); } } }