2017-03-02 36 views
-2
private void Build_Button(object sender, RoutedEventArgs e) 
    { 
     T.BuildStatus = "Building...";    
     BuildSelected(T.ListofTrucks);     
     T.BuildStatus = "Build Complete"; 
    } 

目前,我有一個標籤綁定到T.BuildStatus,我想顯示前得到一個OnPropertyChanged事件exectue「建設......」而我的文件進行編譯,但標籤不僅會buildSelected方法完成後更新。在繼續進行其他事件通話之前,如何獲取此標籤以進行更新?如何將當前事件繼續

編輯:物體T正在實施INotifyPropertyChanged的正確

+0

第1步:轉到MVVM,忘記你的WinForms背景。 –

+0

@HristoYankov我沒有看到任何跡象表明他們沒有... – Servy

+0

我使用MVVM,我認爲更新BuildStatus的事件被推遲到按鈕事件完成。 – Kennya42

回答

0

假設BuildSelected(T.ListofTrucks);是CPU密集型工作。如果它在UI線程上調用,它將會阻止INotify更新,即由於UI線程繁忙,它不能更新。最簡單的解決:

private async void Build_Button(object sender, RoutedEventArgs e) 
{ 
    T.BuildStatus = "Building...";    
    await Task.Run(() => BuildSelected(T.ListofTrucks));     
    T.BuildStatus = "Build Complete"; 
} 

或者如果IO操作:

private async void Build_Button(object sender, RoutedEventArgs e) 
{ 
    T.BuildStatus = "Building...";    
    await BuildSelectedAsync(T.ListofTrucks));     
    T.BuildStatus = "Build Complete"; 
} 

async Task BuildSelectedAsync(ListofTrucks x)實施將取決於IO操作和你究竟在做什麼改變。

+0

謝謝你,這工作得很好! – Kennya42

相關問題