자료/WPF

WPF의 UI접근, Invoke

네오블루 2011. 5. 13. 13:10

 WPF에서는 thread를 크게 두가지로 나눕니다. 
하나는 UI thread, 다른 하나는 비 UI thread 입니다.

첫번째 Thread

   => UI Thread = UI를 담당하는 Threade.

두번째 Thread

   => 비 UI Thread = WPF에서 별도로 생성하지 않고 이미 돌아가고 있는 프로세스 Thread

 

비 UI Thread에서 UI Thread에 그냥 접근하려 하면 런타임에러가 발생한다.

 

결방법은 Dispatcher.Invok함수를 사용하는 것!

 

public delegate void InvokeTest(int temparg);   

public void function_name(int temparg)   

{   

 //할 ui 작업   

    

 }   

Canvas cv;//접근할 canvas   

  

 // 이벤트 처리 : xxx가 모두 준비되면 호출. UI 세팅.   

 public void XXX_OnCompleted()   

 {   

 InvokeTest invoke_ld = new InvokeTest(function_name);   

 this.cv.Dispatcher.Invoke(DispatcherPriority.Normal, invoke_ld, 0);   

}
 

관련 링크 : http://msdn.microsoft.com/ko-kr/magazine/cc163328.aspx

 

또 다른 자료 추가..

 public delegate void CallBack();
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    
Thread t = new Thread(LoadData);
    t.Start();
}

private void LoadData()
{

    ChangeToWaitCursor();
}

public void ChangeToWaitCursor()
{
    
if (this.Dispatcher.CheckAccess())
    {
        Cursor = 
Cursors.Wait;
    }
    else
    {
        
CallBack d = new CallBack(ChangeToWaitCursor);
        
this.Dispatcher.Invoke(d, null);
    }
}

출처 : http://blog.naver.com/goodshot31/100122733224 

[출처] WPF의 UI접근, Invoke|작성자 세뽕