我從 wpf 開始。我有一個 TreeView,其中每個專案都有一個復選框。我正在嘗試創建一個影片,其中在回圈內以編程方式檢查復選框。在研究了一段時間后,我想出了以下方法 -
private void Traverse_Click(object sender, RoutedEventArgs e)
{
ItemCollection items = tvMain.Items;
Task.Factory.StartNew( ()=>
Dispatcher.Invoke( (Action)(() =>
{
foreach (TreeViewItem item in items)
{
UIElement elemnt = getCheckbox();
if (elemnt != null)
{
CheckBox chk = (CheckBox)elemnt;
chk.IsChecked = !chk.IsChecked;
tvMain.Items.Refresh();
tvMain.UpdateLayout();
Thread.Sleep(500);
}
}
})));
然而,盡管我做了所有嘗試,樹并沒有在回圈內更新,只是在最后。所以所有復選框都被同時選中。如何在回圈內更新樹?謝謝
uj5u.com熱心網友回復:
替換Thread.Sleep為Task.Delay異步“睡眠”:
private async void Traverse_Click(object sender, RoutedEventArgs e)
{
ItemCollection items = tvMain.Items;
foreach (TreeViewItem item in items)
{
UIElement elemnt = getCheckbox();
if (elemnt != null)
{
CheckBox chk = (CheckBox)elemnt;
chk.IsChecked = !chk.IsChecked;
await Task.Delay(500);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/489992.html
下一篇:WPF實時重繪文本資料
