C# WPF PowerModeChanged 不适用于 Surface
C# WPF PowerModeChanged doesn't work on Surface
在非表面设备中测试下面的代码工作得很好,但是当我在表面上尝试时,我只会在拔下电源线时收到通知('statusChange' powerMode 被触发)。将表面置于 SLEEP 未调用的处理程序(未触发 'resume' 和 'suspend' powerModes)。
任何人都知道为什么?谢谢你。
表面规格:
OS 名称:Microsoft Windows 10 Pro
版本:10.0.17134 编译 17134
OS 制造商:微软公司
系统制造商:Microsoft Corporation
系统型号:Surface Pro
系统类型:基于 x64 的 PC
系统 SKU:Surface_Pro_1796
示例 [WPF Visual Studio Pro 2015]
主窗口:
using System;
using System.Windows;
using Microsoft.Win32;
namespace WpfApplication2
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged);
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged);
}
private void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
{
listView1.Items.Add(string.Format("{0} : Power mode changed = {1}", DateTime.Now, e.Mode));
}
}
}
XAML
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication2"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
<Grid>
<ListView x:Name="listView1" Margin="0">
<ListView.View>
<GridView>
<GridViewColumn/>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
我也在解决这样的问题。据我了解,Surface 支持 "Sleep state(Modern Standby)",即 S0 低功耗,并且尚未处于实际睡眠状态 (S1-3)。按下电源按钮或单击windows菜单中的"sleep"选项不会直接进入睡眠,而是进入S0低功耗,因此不会触发PowerModeChanged。
在非表面设备中测试下面的代码工作得很好,但是当我在表面上尝试时,我只会在拔下电源线时收到通知('statusChange' powerMode 被触发)。将表面置于 SLEEP 未调用的处理程序(未触发 'resume' 和 'suspend' powerModes)。
任何人都知道为什么?谢谢你。
表面规格:
OS 名称:Microsoft Windows 10 Pro
版本:10.0.17134 编译 17134
OS 制造商:微软公司
系统制造商:Microsoft Corporation
系统型号:Surface Pro
系统类型:基于 x64 的 PC
系统 SKU:Surface_Pro_1796
示例 [WPF Visual Studio Pro 2015]
主窗口:
using System;
using System.Windows;
using Microsoft.Win32;
namespace WpfApplication2
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged);
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged);
}
private void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
{
listView1.Items.Add(string.Format("{0} : Power mode changed = {1}", DateTime.Now, e.Mode));
}
}
}
XAML
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication2"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
<Grid>
<ListView x:Name="listView1" Margin="0">
<ListView.View>
<GridView>
<GridViewColumn/>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
我也在解决这样的问题。据我了解,Surface 支持 "Sleep state(Modern Standby)",即 S0 低功耗,并且尚未处于实际睡眠状态 (S1-3)。按下电源按钮或单击windows菜单中的"sleep"选项不会直接进入睡眠,而是进入S0低功耗,因此不会触发PowerModeChanged。