- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
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/
我正在构建一个需要从互联网下载 RSS 数据的 Windows 8 应用程序。 有一个等待的 GetFeedsAsync() 方法负责此操作,在我的应用程序主页的(异步)LoadState 方法中调用
我的意图是,当用户单击一个按钮导航到另一个页面时,他将看到一个进度条,直到另一个页面完全加载为止。 我已经找到了很多关于这个主题的教程,但是它们都使用了代码隐藏。我希望能够不使用代码隐藏(如果可能)。
我正在编写一个小型 UWP 项目,也使用 MVVM 模式(MVVM Light 框架)进行学习,并且在许多场景和控件中遇到了绑定(bind)问题。 我已经努力将其中一个隔离到可用的迷你示例项目中 he
我想创建一个带有两个网格的自定义用户控件,我想在其中加载图像,并且在加载图像之前我想显示 progressRing 控件。当我添加第二个 ProgressRing 时出现问题。我的 XAML 如下所示
我正在使用 WPF 中的排序和分组填充 DataGrid,我想为用户实现一个进度指示器,让他们知道当前查询仍在后台运行。我正在尝试使用 Mahapps 的 ProgressRing 但我不知道如何实现
看起来 MahApps.Metro ProgressRing 控件默认的最小尺寸为 60x60。 ProgressRing 有一个名为“IsLarge”的属性,但即使将其设置为“False”,它似乎也
引用http://briandunnington.github.io/progressring-wp8.html对于进度指示器的一个有趣的新实现,我想使 ProgressRing 控件适应 Windo
Window 中有一个TreeView。我想在事件中从 ItemsSource 加载 TreeViewItems,同时显示 ProgressRing(MahApps.Metro.Controls)。
我是一名优秀的程序员,十分优秀!