2016-06-13 64 views
0

我是XAML和c#的新手,我正試圖弄清楚如何更新進度條。ProgressBar不反映價值變化C#

我在XAML下面的代碼:

<Hyperlink Click="Launch_Click">Launch Program</Hyperlink> 
<ProgressBar x:Name="Progress1" x:Uid="Progress1" Minimum="0" Maximum="1" Value="0"> 

而且Launch_Click在C#的實施

private void Launch_Click(object sender, RoutedEventArgs e) 
{ 
    for(int i = 0; i<10; i++) 
    { 
     Progress1.Value +=0.1; 
    } 

} 

當我運行調試器Progress1.Value似乎更新正確的,但是進度條不似乎反映了這種變化,直到執行Launch_Click完成。如何使進度條反映更改爲Progress1.Value更新?

+0

你的循環代碼中的下一個刷新活動吸引了更新之前將完全執行。即使*如果它刷新了,循環將會完成得非常快。只有100次迭代,這將在不到一毫秒內完成。 – Rob

+0

嗨,羅布,感謝您的評論,我明白,循環完成非常快,但在調試器很容易看到進度條沒有更新。我認爲它與刷新事件有關,B/C如果我顯示for循環進度欄中的消息框更新正確。我如何刷新活動?謝謝! – Yituo

回答

1

異步證明對於訪問UI線程的應用程序特別有價值,因爲所有與UI相關的活動通常共享一個線程。如果任何進程在同步應用程序中被阻止,則全部被阻止。你的應用程序停止響應,你可能會認爲它失敗了,而只是等待。

當您使用異步方法時,應用程序會繼續響應UI。例如,您可以調整窗口大小或最小化窗口,或者如果您不想等待它完成,可以關閉該應用程序。

asyncawait關鍵字在C#中的異步編程的心臟。通過使用這兩個關鍵字,您可以使用.NET Framework或Windows運行時中的資源創建一個異步方法,就像創建同步方法一樣容易。通過使用async和await定義的異步方法稱爲異步方法。

因此,所有你需要的是改變這樣的

public async void button1_Click(object sender , EventArgs e) 
{ 
    for(int i=0;i<100;i++) 
    { 
     Progress1.Value +=1; 
     await Task.Delay(10); 
    } 
} 
+0

嗨,感謝您的評論,您能否提供更多有關這些教程創意如何應用於我的問題的信息?對不起,但我對c#和XAML相當陌生,所以你可以給我一個解決我的問題的一般方法的指導,我會閱讀這些文章並應用它們。謝謝! – Yituo

+0

我編輯了答案 – mohsen