C#:是否 Windows.Devices.Power.Battery.ReportUpdate 说明计算机是否已插入并限制事件
C#: Does Windows.Devices.Power.Battery.ReportUpdate state if computer is plugged in, and limiting events
我希望在计算机已拔下电源并且 运行 使用电池时得到通知。一旦使用电池,我想知道电池百分比何时达到 25%。我更喜欢一个事件,但如有必要可以进行投票。
有多种方法可以检查计算机是否已接通电源或使用电池。
您可以投票查看:
System.Windows.SystemParameters.PowerLineStatus == System.Windows.PowerLineStatus.Offline;
var batteryPercentage == SystemInformation.PowerStatus.BatteryLifePercent;
除了必须进行投票外,我看不出有任何缺点。
您还可以使用 Windows.Devices.Power.Battery.AggregateBattery.ReportUpdated 中的事件 ReportUpdate。这似乎非常接近我想要的。从这里你可以得到 BatteryStatus
Enum.
可能性是充电、放电、空闲和不存在。我的猜测是 Charging 或 Idle 必然意味着笔记本电脑已插入电源,而 Discharging 则意味着它仅使用电池。 但这只是我的猜测!文档中没有任何地方这样说。我可以想象你可能有一个非常糟糕的电池,即使它已插入,它仍在放电。我如何确定它已插入?
另外,活动实在是太多了。当它插入并充电并且电池百分比上升时,我真的不想要一个事件。我真的只关心它被拔掉,一旦它被拔掉,达到 25%。我想如果没有太多事件我可以忽略不必要的信息。 有没有办法减少或选择事件,或者没有太多我应该忽略这个?
I really only care about it being unplugged, and once it's unplugged, getting to 25%
请检查Get battery information,一旦你有聚合电池对象,调用GetReport
得到相应的BatteryReport
。
The Battery object triggers the ReportUpdated event when charge, capacity, or status of the battery changes. This typically happens immediately for status changes and periodically for all other changes.
Battery.AggregateBattery.ReportUpdated += AggregateBattery_ReportUpdated;
async private void AggregateBattery_ReportUpdated(Battery sender, object args)
{
if (reportRequested)
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
// Clear UI
BatteryReportPanel.Children.Clear();
if (AggregateButton.IsChecked == true)
{
// Request aggregate battery report
RequestAggregateBatteryReport();
}
else
{
// Request individual battery report
RequestIndividualBatteryReports();
}
});
}
}
如果您只是想检测它是否已拔下并达到 25%。你可以用一个方法打包上面的代码。
例如:
public static class BatteryUnpluggedTo25
{
private static Action<bool> _action;
public static void Report(Action<bool> action)
{
Battery.AggregateBattery.ReportUpdated += AggregateBattery_ReportUpdated;
_action = action;
}
private static void AggregateBattery_ReportUpdated(Battery sender, object args)
{
var aggBattery = Battery.AggregateBattery;
var report = aggBattery.GetReport();
switch (report.Status)
{
case Windows.System.Power.BatteryStatus.NotPresent:
break;
case Windows.System.Power.BatteryStatus.Discharging:
currentBatteryLevel(report, _action);
break;
case Windows.System.Power.BatteryStatus.Idle:
break;
case Windows.System.Power.BatteryStatus.Charging:
break;
default:
break;
}
}
private static void currentBatteryLevel(BatteryReport report, Action<bool> action)
{
var Maximum = Convert.ToDouble(report.FullChargeCapacityInMilliwattHours);
var Value = Convert.ToDouble(report.RemainingCapacityInMilliwattHours);
var level = Value / Maximum;
if (level <= 0.25)
{
action(true);
}
}
}
用法
BatteryUnpluggedTo25.Report((s) =>
{
if (s == true)
{
// do something
}
});
我希望在计算机已拔下电源并且 运行 使用电池时得到通知。一旦使用电池,我想知道电池百分比何时达到 25%。我更喜欢一个事件,但如有必要可以进行投票。
有多种方法可以检查计算机是否已接通电源或使用电池。 您可以投票查看:
System.Windows.SystemParameters.PowerLineStatus == System.Windows.PowerLineStatus.Offline;
var batteryPercentage == SystemInformation.PowerStatus.BatteryLifePercent;
除了必须进行投票外,我看不出有任何缺点。
您还可以使用 Windows.Devices.Power.Battery.AggregateBattery.ReportUpdated 中的事件 ReportUpdate。这似乎非常接近我想要的。从这里你可以得到 BatteryStatus
Enum.
可能性是充电、放电、空闲和不存在。我的猜测是 Charging 或 Idle 必然意味着笔记本电脑已插入电源,而 Discharging 则意味着它仅使用电池。 但这只是我的猜测!文档中没有任何地方这样说。我可以想象你可能有一个非常糟糕的电池,即使它已插入,它仍在放电。我如何确定它已插入?
另外,活动实在是太多了。当它插入并充电并且电池百分比上升时,我真的不想要一个事件。我真的只关心它被拔掉,一旦它被拔掉,达到 25%。我想如果没有太多事件我可以忽略不必要的信息。 有没有办法减少或选择事件,或者没有太多我应该忽略这个?
I really only care about it being unplugged, and once it's unplugged, getting to 25%
请检查Get battery information,一旦你有聚合电池对象,调用GetReport
得到相应的BatteryReport
。
The Battery object triggers the ReportUpdated event when charge, capacity, or status of the battery changes. This typically happens immediately for status changes and periodically for all other changes.
Battery.AggregateBattery.ReportUpdated += AggregateBattery_ReportUpdated;
async private void AggregateBattery_ReportUpdated(Battery sender, object args)
{
if (reportRequested)
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
// Clear UI
BatteryReportPanel.Children.Clear();
if (AggregateButton.IsChecked == true)
{
// Request aggregate battery report
RequestAggregateBatteryReport();
}
else
{
// Request individual battery report
RequestIndividualBatteryReports();
}
});
}
}
如果您只是想检测它是否已拔下并达到 25%。你可以用一个方法打包上面的代码。
例如:
public static class BatteryUnpluggedTo25
{
private static Action<bool> _action;
public static void Report(Action<bool> action)
{
Battery.AggregateBattery.ReportUpdated += AggregateBattery_ReportUpdated;
_action = action;
}
private static void AggregateBattery_ReportUpdated(Battery sender, object args)
{
var aggBattery = Battery.AggregateBattery;
var report = aggBattery.GetReport();
switch (report.Status)
{
case Windows.System.Power.BatteryStatus.NotPresent:
break;
case Windows.System.Power.BatteryStatus.Discharging:
currentBatteryLevel(report, _action);
break;
case Windows.System.Power.BatteryStatus.Idle:
break;
case Windows.System.Power.BatteryStatus.Charging:
break;
default:
break;
}
}
private static void currentBatteryLevel(BatteryReport report, Action<bool> action)
{
var Maximum = Convert.ToDouble(report.FullChargeCapacityInMilliwattHours);
var Value = Convert.ToDouble(report.RemainingCapacityInMilliwattHours);
var level = Value / Maximum;
if (level <= 0.25)
{
action(true);
}
}
}
用法
BatteryUnpluggedTo25.Report((s) =>
{
if (s == true)
{
// do something
}
});