2016-09-06 13 views
2

VSTOアプリケーションレベルのWord AddInとWPFアプリケーションを開発中ですが、システムがスリープ状態になり、その後再開するときに通知する必要があります。イベントハンドラを各アプリケーションのSystemEvents.PowerModeChangedイベントにバインドしましたが、何らかの理由でシステムがスリープまたは再開するときに呼び出されることはありません。テストするだけで、私は単にシステムがスリープ状態になるときにコンソールに書き込もうとしています。私もブレークポイントを設定しようとしましたが、それもうまくいきませんでした。とにかく、もしシステムがアプリケーションを一時停止しているとすれば、私は確信が持てません。しようと、それは決して印刷物や休憩のいずれかで:SystemEvents.PowerModeChangedイベントハンドラがVSTOおよびWPFアプリケーションで呼び出されていない

VSTOアドイン

void ThisAddIn_Startup(object sender, EventArgs e) 
{ 
    SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(powerModeChanged); 
} 

public void powerModeChanged(object sender, PowerModeChangedEventArgs args) 
{ 
    Console.WriteLine("Sleeping....."); 
} 

WPF

internal MyControl() 
{ 
    SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(powerModeChanged); 
} 

public void powerModeChanged(object sender, PowerModeChangedEventArgs args) 
{ 
    Console.WriteLine("Sleeping!!"); 
} 

私はプライベートにパブリックからイベントハンドラのアクセスレベルを変更しようとしています各アプリケーションのコードの他の部分にバインドを移動するだけでなく、問題を解決しませんでした。どんな助けでも大歓迎ありがとう!


解決策:私がVirtualBox VMを介してウィンドウを実行していたため、コメントと役立つ回答によれば、イベントは発生していませんでした。同僚がネイティブのWindowsマシン上でコードを実行すると、それは機能しました。

+0

あなたはVSTOで 'Console'を持っていけないので、これは、最も可能性の高い原因です。あなたの出来事が発射されるのを確実にするためにコンソールの代わりに 'ファイル'に書き込もうとしてください。 – lokusking

+0

@ lokuskingはそれを試してみましたが動作しませんでした。つまり、私のEventHandlerがイベントに正しくバインドされていないということでしょうか? – Midas

+0

また、VirtualBox Windows 10 VMインスタンスでこれを実行していますが、それが問題なのかどうかはわかりません。 – Midas

答えて

1

これを試してみてください:

XAML:

<Window x:Class="WpfApplication279.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:WpfApplication279" 
    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> 

メインウィンドウ:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged; 
    } 

    private void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e) 
    { 
     listView1.Items.Add(string.Format("{0} : Power mode changed = {1}", DateTime.Now, e.Mode)); 
    } 
} 

enter image description here


右クリックスタートボタンとのWindows 10マシンにイベントをトリガするために:

機械まかせ

enter image description here


がスリープに入りますmode by timeoutも同じ方法で動作します。これらは私の設定です:

enter image description here

同じ結果:

enter image description here

+0

遅れて申し訳ありませんが、あなたの正確なコードを使用してこれを実装しようとしましたが、残念ながらlistViewに何も現れませんでした。 Visual Studioや、イベントハンドラが呼び出されないように設定していないソリューション/プロジェクト全体のプロパティがありますか?助けてくれてありがとう! – Midas

+0

また、VirtualBox Windows 10 VMインスタンスでこれを実行していますが、それが問題なのかどうかはわかりません。 – Midas

+0

VMインスタンスをスリープモードにする方法を教えてください。 – jsanalytics

関連する問題