非Surfaceデバイスで以下のコードをテストすると問題なく動作しますが、Surfaceで試してみると、電源ケーブルを取り外したときにのみ通知が届きます(「statusChange」powerModeがトリガーされます)。サーフェスをSLEEPに置くと、呼び出されないハンドラーになります(「resume」および「suspend」powerModesはトリガーされません)。
誰もが理由を知っていますか?ありがとうございました。
Surfaceの仕様:
OS名:Microsoft Windows 10 Pro
バージョン:10.0.17134Compilação17134OS
メーカー:Microsoft Corporation
システムメーカー:Microsoft Corporation
システムモデル:Surface Pro
システムタイプ:x64ベースのPC
システムSKU:Surface_Pro_1796
例[WPFVisual Studio Pro 2015]
MainWindow:
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は「スリープ状態(モダンスタンバイ)」またはS0低電力をサポートしており、実際のスリープ状態(S1-3)にはまだ達していません。電源ボタンを押すか、Windowsメニューから[スリープ]オプションをクリックしても、直接スリープにはなりませんが、代わりにS0低電力になり、PowerModeChangedはトリガーされません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加