我有一段代碼測試GUI和線程的行爲。我想保持進度動畫運行(與IsIndeterminate="True"
)作爲我查詢數據庫,並添加了大量的行(10K +)到DataGrid中的。即使我在Dispatcher.BeginInvoke
包數據庫和GUI代碼,如在DataGrid被填充進度動畫將這個混蛋。我希望ProgressBar動畫會凍結(如果在GUI線程上)或平穩運行(如果在一個單獨的線程上),但我不明白爲什麼動畫正在快速運行。不定進度的動畫加加速度在Dispatcher.BeginInvoke
請不要建議BackgroundWorker,因爲我想了解這個問題的問題,以及爲什麼BeginInvoke不分離線程。我只是簡單地循環訪問SqlDataReader並逐個添加到DataGrid中,而不是將數據綁定到源或數據表。
// XAML
<Button Click="Button_Click"></Button>
<ProgressBar IsIndeterminate="True"></ProgressBar>
<DataGrid ... ></DataGrid>
// C#
private void Button_Click(object sendoer, RoutedEventArgs e)
{
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal,(ThreadStart)delegate()
{
// Query database and update GUI (e.g. DataGrid)
});
}
進度條動畫在UI線程上運行。 WinRT能夠在不同的線程上運行動畫,但不幸的是WPF仍然無法使用該動畫。至於知道它爲什麼會亂動,你如何將數據綁定到DataGrid? –
我只是簡單地循環訪問SqlDataReader,然後逐個添加到DataGrid中,而不是將數據綁定到源或數據表。 – KMC
在你的代碼示例中,你所有的UI線程工作(使用BeginInvoke),那爲什麼它會流暢呢? – Evk