0

나는 팝업 창인 컨트롤을 사용합니다. 나는 그것을 보이고 숨기는 methodes을 가지고 있고 나는 다른 스레드에서 나의 팝업을 보여주고 숨기는 것을 막을 수있는 기능을 구현할 필요가있다. UI가 아닌 스레드에서 내 팝업을 표시 할 수 있습니까?팝업을 표시하는 스레드를 어떻게 제어 할 수 있습니까?

업데이트

내 질문의 주요 목표는 다음과 같습니다

그것은, 메서드 숨기기 동일한 스레드에 있어야하는 방법 쇼 시작 스레드 것과 중요하지 않아. 이것을 구현하는 방법?

public void Show() 
     { 
      IsShown = true; 
      if (this.ChildWindowPopup == null) 
      { 
       this.ChildWindowPopup = new Popup(); 
        try 
       { 
        this.ChildWindowPopup.Child = this; 
       } 
       catch (ArgumentException) 
       { 
        throw new InvalidOperationException("The control is already shown."); 
       } 
      }  
      if (this.ChildWindowPopup != null && Application.Current.RootVisual != null) 
      { 
       // Configure accordingly to the type 
       InitializeProgressType(); 
        // Show popup 
       this.ChildWindowPopup.IsOpen = true; 
      } 
     } 

public void Hide() 
     { 
      IsShown = false; 
      // Restore system tray 
      SystemTray.IsVisible = currentSystemTrayState; 
      this.progressBar.IsIndeterminate = false; 
      this.ChildWindowPopup.IsOpen = false; 
      } 
+0

표시 할 때 Thread.CurrentThread를 저장하고 숨길 때 동일한지를 확인할 수 있습니까? 아직도 - 나는이 질문이 다른 문제를 지적한다고 주장 할 것이다. 왜 스레드를 확인하고 싶습니까? 목표가 일부 작업의 진행률 막대를 표시하는 것이면 - 진행률 표시 줄을 작업과 연관시키는 객체 (토큰)를 만들 수 있습니다. 다른 문제를 디버깅하는 것 이외의 다른 방법을 스레딩 방식으로 관리하려는 이유가 없습니다. –

답변

0

일반적으로 UI 구성 요소 작업은 UI 스레드에서만 수행 할 수 있습니다. 특정 팝업이 UI 스레드에서 시작되는 것을 차단하려면 SynchronizationContext 또는 Thread 클래스를 사용하여 실행 된 스레드를 내부적으로 검사하는 인터페이스를 제공해야하지만 결국에는 UI 스레드에서 메서드를 호출하여 Popup을 표시합니다.

+0

내 질문이 업데이트되었습니다.) – revolutionkpi

관련 문제