2011-08-18 6 views
1

Windows 양식을 시작할 때 내 알림 아이콘이 시스템 트레이에 나타나지 않는 이유는 무엇입니까?
여기 내가하는 일이 있습니다.
Windows 응용 프로그램 (현재 사용자의 컨텍스트에서 해당 응용 프로그램을 실행하기 위해 가장을 사용하고 있음) 인 트레이 응용 프로그램을 시작하는 Windows 서비스가 있습니다. 트레이 응용 프로그램에서 알림 아이콘이 포함 된 양식을 시작합니다.
여기서 문제는 알림 아이콘이 시스템 트레이에 나타나지 않고 그 이유를 찾을 수 없다는 것입니다.
양식의 OnLoad 메서드에서 폼의 visible 속성을 false로 설정하고 있습니다. 또한 (IPC와 같은) 원격 서비스 호출을하고 있습니다. 그게 문제 야?
알림 표시 아이콘을 시스템 트레이에 항상 나타나게하려면 어떻게해야합니까?
편집 : 여기에 지금은 뭔가가 호출되지 않는 경우 찾을 알림 아이콘 코드 또는 다른 조건문 주위에 몇 중단 점을 건의 할 것입니다 들어 온로드 기능
알림 C# winforms에 알림 아이콘이 표시되지 않습니다.

protected override void OnLoad(System.EventArgs e) 
{ 
    this.Visible = false; 
    //Get some value from registry 
    CheckForStealthMode(); 
    GetLoginType(); 
    bool GetProbeStatus = false; 
    ServiceActivityInterface remoteMethods = null; 
    do 
    { 
     try 
     { 
      remoteMethods = (ServiceActivityInterface)Activator.GetObject(typeof(ServiceActivityInterface), "tcp://localhost:18800/ServiceRemoting); 
      ProbeStatus = remoteMethods.GetProbeStatus(); 
      GetProbeStatus = true; 
     } 
     catch (Exception exception) 
     { 
      GetProbeStatus = false; 
      log.Error("Exception while getting the status of Probe:" + exception.Message); 
     } 
     finally 
     { 
      remoteMethods = null; 
      if (!GetProbeStatus) 
      { 
       Thread.Sleep(5000); 
       log.Debug("Retrying to get the probe status."); 
      } 
     } 
    } while (!GetProbeStatus); 
} 
+1

OnLoad 메서드에서 코드를 공유 할 수 있습니까? –

+0

트레이 아이콘이 표시되지 않거나 예상대로 실행되지 않는 것입니까? Windows 이벤트 뷰어를 확인하여 응용 프로그램 이벤트 로그 (또는 보안 로그)에보고 된 것이 있는지 확인 했습니까? –

+0

@ Ben Scott 질문에 코드를 게시했습니다. – Prasad

답변

0

코드입니다. 진행 상황을 진단하는 데 도움이되는 일관된 복제물을 찾으십시오. 나는 가장 이상한 일들이 있었는데, 가장 혼란 스러웠던 것이 시간 초과 이벤트에 연결된 것이었다.

나는 또한 제안했다. (이것이 이상적이라고 Thread.Sleep 메서드를 관련 짓는다면 당신의 문제를 해결할 수도있다. 사용자가 고정 된 UI를 가져옵니다. 타이머 클래스 중 하나를 사용하고 틱 또는 경과 이벤트를 선택하여 사용자가 계속할 수 있지만 나중에 지연 될 수 있습니다.

+0

내 질문에 코드를 게시했습니다 – Prasad

+0

흠, 그래도 여전히 중단 점보기를 사용하면 이러한 결과가 반복 될 수있는 재생산을 설정하거나 설정하지 않은 주요 목표를 달성하게됩니다. 그것은 당신이 틀린 순서로 해킹이나 무언가가 필요하거나 단지 코드에 문제가있는 컨트롤에서 벗어난 버그 일 수 있습니다. 중단 점은 내가 보통 시도하고 이것을 확립하는 방법이다. – Coops

0

OnLoad 메서드를 보면 예외가 throw 된 경우 5 초마다 한 번만 실행할 수있는 잠재적으로 무한 루프를가집니다. 예외가 기록 된 다음 던져 버릴 수 있습니다. Thread.Sleep 사용자가 UI 스레드를 차단하고 알림 아이콘이 표시되지 않도록 할 가능성이 높습니다.살펴보기또는 RPC GetProbeStatus을 호출하고 RPC 코드를 다른 스레드로 이동하여 UI를 차단하지 않도록하십시오.

+1

예, RPC가 새로운 스레드로 이동 한 UI 스레드를 차단하고 있습니다. 그러나 그 후에도 나는 똑같은 문제를 겪고있었습니다. 방금 notify 아이콘의 visible 속성을 false로 설정하여 일시적인 해결책을 찾았습니다. – Prasad