- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我创建了一个需要处于安全状态的应用程序,因此我想在后台跟踪计算机的电源状态。如果电池电量(如果有的话)低或严重,我不会允许用户继续使用该应用程序并正确退出。
首先,令我惊讶的是不存在这样的事件来检测变化。您需要始终手动检查 PowerStatus。
所以,我围绕它创建了一个包装器,如下所示:
using System;
using System.Windows.Forms;
namespace MyApp
{
internal static class BatteryManagement
{
//
internal static event EventHandler<EventArgs> 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 没有任何公共(public)构造函数,我无法存储先前状态的结果...
我该如何管理?
谢谢...
最佳答案
实际上有,它叫做SystemEvents.PowerModeChanged
如果 PowerModeChangedEventArgs
的 Mode
为 StatusChange
,则表示电池状态已更改。
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
}
}
本教程也可能有用:
http://netcode.ru/dotnet/?lang=&katID=30&skatID=277&artID=7643
关于C# - 在 PowerStatus 更改时引发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5378449/
我创建了一个需要处于安全状态的应用程序,因此我想在后台跟踪计算机的电源状态。如果电池电量(如果有的话)低或严重,我不会允许用户继续使用该应用程序并正确退出。 首先,令我惊讶的是不存在这样的事件来检测变
所以我的方法如下: PowerStatus powerStatus = SystemInformation.PowerStatus; if (powerStatus.BatteryChargeStat
我最近在 C# 中遇到了 PowerStatus 类,我发现了一些不寻常的东西(我猜是,也许是因为我不知道平台或语言够了,你告诉我!)当我想创建一个实例时,我得到了错误: Error 1 The ty
我是一名优秀的程序员,十分优秀!