gpt4 book ai didi

c# - 当 WPF 中的大量 UI 更新时,ProgressRing 卡住了?

转载 作者:太空宇宙 更新时间:2023-11-03 15:58:45 31 4
gpt4 key购买 nike

Window 中有一个TreeView。我想在事件中从 ItemsSource 加载 TreeViewItems,同时显示 ProgressRing(MahApps.Metro.Controls)。

但是 ProgressRing 总是卡住。

我用多线程&Dispatcher进程加载ItemsSource,也不行。

XAML:

...
<Button Name="startButton" Content="Start" Click="Start"/>
<controls:ProgressRing x:Name="p1" IsActive="False"></controls:ProgressRing>
<TreeView x:Name="treeView1"></TreeView>
...

CS:

private void Start(object sender, EventArgs e)
{
TreeViewItem root = new TreeViewItem() { Header = "Root", IsExpanded = true };
treeView1.Items.Add(root);

p1.IsActive = true;

Thread thread = new Thread(() =>
{
// Main work
InitTree(root, "D:\\");

startButton.Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle,
(ThreadStart)delegate() {
p1.IsActive = false;
});
});

thread.Start();
}

private void InitTree(TreeViewItem item, string dir)
{
string[] dirs = Directory.GetDirectories(dir);

foreach (string subdir in dirs)
{
startButton.Dispatcher.Invoke(DispatcherPriority.ApplicationIdle,
(ThreadStart)delegate()
{
TreeViewItem subItem = new TreeViewItem() { Header = subdir, IsExpanded= true };
item.Items.Add(subItem);
InitTree(subItem, subdir);
});
}
}

我读过并试过的内容:
http://msdn.microsoft.com/en-us/library/ms741870(v=vs.110).aspx
专业WPF编程,第31章多线程

最佳答案

改变

foreach (string subdir in dirs)
{
startButton.Dispatcher.Invoke(DispatcherPriority.ApplicationIdle,
(ThreadStart)delegate()
{
TreeViewItem subItem = new TreeViewItem() { Header = subdir, IsExpanded= true };
item.Items.Add(subItem);
InitTree(subItem, subdir);
});
}

foreach (string subdir in dirs)
{
TreeViewItem subItem = new TreeViewItem() { Header = subdir, IsExpanded= true };

startButton.Dispatcher.Invoke(DispatcherPriority.ApplicationIdle,
(ThreadStart)delegate()
{
item.Items.Add(subItem);
});

InitTree(subItem, subdir);
}

会更好。

关于c# - 当 WPF 中的大量 UI 更新时,ProgressRing 卡住了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22394931/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com