2009-08-07 4 views
0

주 윈도우에 두 개의 이벤트를 보내려고합니다. 사용자가 데이터를 업데이트하고 있음을 알리는 애니메이션을 표시 할 수 있습니다.WPF - 이벤트 스레딩, GUI 업데이트 질문

이 개체는 ObservableCollection 개체이므로 OnPropertyChanged는 주 창의 바인딩에서 즉시 선택됩니다. 수면은 사용자가 애니메이션을 볼 수 있도록 그 안에 있습니다.

그러나 첫 번째 OnPropetyChanged는 절대로 볼 수 없습니다. 나는 우리가 여기서 하나의 스레드에 있기 때문에 timer_tick이 GUI 업데이트 전에 끝내야하기 때문이라고 가정하고 있습니다. 어떤 동기 부여? VB6에서 우리는 DoEvents 나 Form.Refresh를 사용할 것입니다.

감사합니다.

private void timer_Tick(object sender, EventArgs e) 
    { 
     Loading = "Before: " + DateTime.Now.ToString(); 
     OnPropertyChanged("Loading"); 

     LoadData(); 
     Thread.Sleep(1000); 

     //Loading = Visibility.Hidden; 
     Loading = "After: " + DateTime.Now.ToString(); 
     OnPropertyChanged("Loading");   
    } 

답변

0

잘 C 번호는 Application.DoEvents 가지고 있지만 나는 절대적으로 필요하지 않는 한 사용을 권장하지 않습니다.

Dispatcher.Invoke에서 OnPropertyChanged 호출을 래핑 해 보았습니까?

+0

당신이 그 코드에 도움이되고 싶지 않으십니까? ;) – LSTayon

+0

N/M 이것은 내가 사용했던 것이다 : queryTimer.Dispatcher.Invoke (DispatcherPriority.Normal, new ThreadStart (delegate {OnPropertyChanged ("Loading");}))); 클래스에있어 this.Dispatcher 호출을 사용할 수 없습니다. 코드를 단계별로 실행하면 첫 번째 파견 후 과부는 검은 색으로 변한 후 타이머 틱에서 나와서 새로 고침 만합니다 ... – LSTayon