2012-01-13 3 views
0

저는 응용 프로그램을 모두 MvvM/Prism/Unity 및 Remote를 데이터 소스로 사용하여 WPF에서 수행했습니다.DispatcherTimer를 사용하여 유휴 시간 - 작동하지 않습니다.

나는 win 폼에서 정말 쉽다. 앱이 몇 분 후에 iddle인지 확인하고 유휴 상태이면 앱을 잠그고 로그인 화면을 표시한다.

Google에서 검색 한 후 DllImport를 사용하는 솔루션과 순수 Wpf 메서드를 사용하는 솔루션을 발견했습니다.

Wpf 방식 (pls 아래 코드 확인)을 구현 한 후에 앱에 로그인 한 후에 만 ​​작동합니다. 간단한 texbox를 클릭하거나 검색을 클릭하면 유휴 상태가됩니다. 방법은 해고되지 않습니다, 거기에 무언가를 할 때 Wpf 유휴 루틴을 만드는 배경에 교수형 뭔가가있는 것처럼 보입니다.

어떻게하면 응용 프로그램과 관련된 메모리에있는 모든 서비스/방법/등을 확인할 수 있습니까? 콜 스택은 나에게 많은 것을 보여주지 못한다. 나는 그것을 affraid 또는 올바른 방법으로 원격 서비스를 호출하거나 내가 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

감사 월, 내 주요 문제는 내가 올바른 방법을 사용하면 내 응용 프로그램에서 뭔가 내가 그렇게 메모리에 갇혀 일부 개체를 만드는 올바른 방법으로 해제/소모하고 있지 않다이다 backgroun에서 실행중인 것이 있는지 확인하십시오. d는 FALSE 일 때 TRUE를 리턴합니다. 나는 전통적인 ImportDll 루틴을 사용했고 잘 동작한다. 건배 – 2Fast4YouBR