首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#交流电源连接/断开事件

C#交流电源连接/断开事件
EN

Stack Overflow用户
提问于 2009-06-21 11:05:36
回答 4查看 771关注 0票数 2

我正在写一个桌面应用程序,想知道是否有任何事件在交流电源状态发生变化时触发。

EN

回答 4

Stack Overflow用户

发布于 2009-06-21 12:12:50

当电源设置发生变化时,Windows会向窗口发送一个事件。这是WM_POWERBROADCAST和它的wParam PBT_POWERSETTINGCHANGE。如果需要,您可以按照Noldorin的建议,在收到此事件池SystemInformation.PowerStatus之后。

票数 2
EN

Stack Overflow用户

发布于 2009-06-21 11:08:46

我不相信BCL中有任何东西会引发这样的变化。考虑到这种状态更新的频率很低,你真的需要一个吗?

我会简单地以固定的时间间隔(即一些秒数)轮询SystemInformation.PowerStatus属性。然后,如果您愿意,可以基于此引发一个事件。

票数 1
EN

Stack Overflow用户

发布于 2012-02-06 20:26:10

我搜索了很长一段时间,发现这是最好的方法,“睡眠”-事件从来没有工作过

代码语言:javascript
复制
 private ManagementEventWatcher managementEventWatcher;
    private readonly Dictionary<string, string> powerValues = new Dictionary<string, string>
                         {
                             {"4", "Entering Suspend"},
                             {"7", "Resume from Suspend"},
                             {"10", "Power Status Change"},
                             {"11", "OEM Event"},
                             {"18", "Resume Automatic"}
                         };
    public void InitPowerEvents()
    {
        var q = new WqlEventQuery();
        var scope = new ManagementScope("root\\CIMV2");

        q.EventClassName = "Win32_PowerManagementEvent";
        managementEventWatcher = new ManagementEventWatcher(scope, q);
        managementEventWatcher.EventArrived += PowerEventArrive;
        managementEventWatcher.Start();
    }
    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);
        }
    }
    public void Stop()
    {
        managementEventWatcher.Stop();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1023671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档