2012-01-13 21 views
0

私はアプリケーションをすべて、MvvM/Prism/UnityとRemoteをデータソースとして使用してWPFで行いました。DispatcherTimerを使用したアイドル時間 - 動作しません。

私は基本的なことが勝つフォームは本当に簡単ですが、ちょうど数分後にアプリであるかどうかをチェックし、アイドル状態の場合は、アプリをロックし、ログイン画面を表示する必要があります。

Googleで検索したところ、DllImportを使用するソリューションと純粋なWpfメソッドを使用するソリューションが見つかりました。

私はWpfの方法(plsは以下のコードをチェックしてください)を実装した後、アプリケーションにログインした後でしか動作しません。もし私が開いて単純なtexboxをクリックしたり、メソッドが起動されていない場合、Wpfアイドルルーチンがそれがそうでないときに何かをしていると考えるようにする背景に何かがぶら下がっているように見えます。

mayアプリに関連するメモリ内にあるすべてのサービス/メソッド/ etcを確認するにはどうすればよいですか?コールスタックは私にはあまり見せない。私はそれを肯定している、または私は正しい方法でリモートサービスを呼び出していない、または私は小道具PropChangedイベント/ observablecollections /などに何かを実装していない...

これを行うには、100%Wpf構造?

private void CheckIdleTime() 
{ 

    handler = delegate 
    { 
     DispatcherTimer timer = new DispatcherTimer(); 
     timer.Interval = TimeSpan.FromSeconds(5); 
     timer.Tick += delegate 
     { 
      if (timer != null) 
      { 
       timer.Stop(); 
       timer = null; 
       System.Windows.Interop.ComponentDispatcher.ThreadIdle -= handler; 

       Console.WriteLine("IDLE! Lets logoff!"); 

       this.LockApplication(); 

       Console.WriteLine("logoff fired"); 

       System.Windows.Interop.ComponentDispatcher.ThreadIdle += handler; 
      } 

     }; 

     timer.Start(); 


     Dispatcher.CurrentDispatcher.Hooks.OperationPosted += delegate 
     { 
      if (timer != null) 
      { 
       timer.Stop(); 
       timer = null; 
      } 
     }; 
    }; 

    ComponentDispatcher.ThreadIdle += handler; 
} 

答えて

1

あり

次のリンクはあなたを助ける...デフォルトウィンドウイベントは、アイドル時間...私たちは、WPFや他のアプリケーションで同じイベントを使用している場合、それは賢明になると思うを見つけるだろうそれを実装..

Application.Idle event not firing in WPF application

+0

おかげで01月、私の主な問題は、私は正しい方法を使用するときに私のアプリで何かが私は、メモリ内に立ち往生いくつかのオブジェクトを作り、正しい方法で解放する/消費するわけではないということですバックグラウンドで実行中のものがあるかどうかを確認するdは、FALSEにする必要があるときにTRUEを返します。私は従来のImportDllルーチンを使用していて、うまく動作しています。乾杯 – 2Fast4YouBR