Csharp/C#教程:C# – 关于PowerStatus更改的提升事件分享


C# – 关于PowerStatus更改的提升事件

我创建了一个需要处于安全状态的应用程序,所以我想在后台跟踪计算机的电源状态。 如果电池电量(如果有)低或严重,我将不允许用户继续使用该应用程序并正确退出。

首先,我很惊讶没有这样的事件来检测变化。 您需要始终手动检查PowerStatus。

所以,我已经围绕它创建了一个包装器,如下所示:

using System; using System.Windows.Forms; namespace MyApp { internal static class BatteryManagement { // internal static event EventHandler Changed; // private static bool _started; private static System.Threading.Timer _timer; private static PowerStatus _previousPowerStatus; internal static void Start() { if (!_started) { _started = true; ManageBatteryLevel(); } } internal static void Stop() { if (_started) { if(_timer != null) { _timer.Dispose(); _timer = null; } _started = false; } } private static void ManageBatteryLevel() { _previousPowerStatus = new PowerStatus(); TimeSpan dueTime = new TimeSpan(0, 0, 0); // Start right now TimeSpan period = new TimeSpan(0, 1, 0); // Run every 1 minute // Setting a timer that launch every period the OnBatteryLevelChange method _timer = new System.Threading.Timer(OnBatteryLevelChange, null, dueTime, period); } private static void OnBatteryLevelChange(Object stateInfo) { PowerStatus powerStatus = new PowerStatus(); if (!_previousPowerStatus.Equals(powerStatus)) { // Ensure battery level is up to date before raising event _previousPowerStatus = powerStatus; if (Changed != null) { Changed(null, EventArgs.Empty); } } } } } 

但是不起作用,因为PowerStatus没有任何公共构造函数,我无法存储以前状态的结果……

我该怎么办呢?

谢谢 …

实际上有,它叫做SystemEvents.PowerModeChanged

如果PowerModeChangedEventArgs具有StatusChange Mode ,则表示电池状态已更改。

 static void SystemEvents_PowerModeChanged(object sender, Microsoft.Win32.PowerModeChangedEventArgs e) { if (e.Mode == Microsoft.Win32.PowerModes.StatusChange) { // Check what the status is and act accordingly } } 

本教程也可能有用:

https://netcode.ru/dotnet/?lang=&katID=30&skatID=277&artID=7643

如果您尝试获取当前的电源状态,则需要调用SystemInformation.PowerStatus而不是new PowerStatus()

这里有一些代码可以返回PowerStatus的所有值

 Type t = typeof(System.Windows.Forms.PowerStatus); PropertyInfo[] pi = t.GetProperties(); for( int i=0; i 

希望这可以帮助。

你很严格,MSDN上的信息根本没用,你可以在这里找到你需要的东西:

https://www.blackwasp.co.uk/PowerStatus.aspx

我希望它有所帮助!

上述就是C#学习教程:C# – 关于PowerStatus更改的提升事件分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/983636.html

(0)
上一篇 2021年12月19日
下一篇 2021年12月19日

精彩推荐