2011-08-28 5 views
1

두 번 호출 한 다음 다른 개체에서 한 번 더 호출하려고합니다.두 스레드에서 WPF가 호출됩니다.

public void Show() 
{ 
    if (mainGrid == null) 
     return; 
    if (!Dispatcher.CheckAccess()) 
    { 
     Dispatcher.BeginInvoke(new ThreadStart(delegate() { Show(); }), DispatcherPriority.Background); 
     return; 
    } 

    mainGrid.Children.Add(rec); 
    rec.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch; 
    rec.VerticalAlignment = System.Windows.VerticalAlignment.Stretch; 

    mainGrid.Children.Add(this); 
    this.HorizontalAlignment = System.Windows.HorizontalAlignment.Center; 
    this.VerticalAlignment = System.Windows.VerticalAlignment.Center; 
} 

두 물체 B, C가 A로부터이 기능을 상속 : I이 프로세스에서 호출 될 때 B.show()을 주제와 C.show()에서 B.showStop()는 I 메인 권한 사용에 대한 예외를 얻을 .children.Add (..) C.show() 이 문제를 해결할 수 있도록 도와주세요.

+0

두 번째 메소드 선언을 제거한 것은 똑같은 것으로 보입니다. (실수로 두 번 붙여 넣었습니까?) –

+0

실제 예외는 무엇입니까? 그리고'showStop()'의 코드는 무엇입니까? – svick

답변

1

나는 예를 들어, 당신이 문제에 대한 자세한 정보를 제공해야한다고 생각 :

  • 클래스의 종류는 어떤 녹화 무엇
  • (불구하고 UI 객체가 될 것으로 보인다)

하지만 잠시 동안 문제는 UI에서 보이지 않는 시각적 객체를 인스턴스화하는 것일 수 있다고 생각합니다. Thread : workerthread에 Button을 생성하면 해당 스레드 Dispatcher가 UI Thread Dispatcher와 다릅니다. .

작은 정보로 어떤 일이 벌어지고 있는지 정확히 알 수는 없지만 다른 스레드에서 생성 된 두 개의 컨트롤을 추가하여 두 개의 Add 중 하나에서 예외가 발생한다고 생각합니다.

+0

감사! 문제를 해결했다. –

관련 문제