- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我构建了一个 TreeView 控件,列出了任何驱动器或文件夹的目录结构。但是,如果您选择一个驱动器,或者具有大型文件夹和子文件夹结构的东西,则控件需要很长时间才能加载,并且在某些情况下会显示 MDA ContextSwitchDeadlock 消息。我已禁用 MDA 死锁错误消息并且它有效,但我不喜欢时间因素和应用程序看起来像已锁定。我如何修改代码以使其不断发送消息,而不是缓冲整个 View 并将其完整传递给控件,有没有办法在构建时将其推送到控件?
//Call line
treeView1.Nodes.Add(TraverseDirectory(source_computer_fldbrowser.SelectedPath));
private TreeNode TraverseDirectory(string path)
{
TreeNode result;
try
{
string[] subdirs = Directory.GetDirectories(path);
result = new TreeNode(path);
foreach (string subdir in subdirs)
{
TreeNode child = TraverseDirectory(subdir);
if (child != null) { result.Nodes.Add(child); }
}
return result;
}
catch (UnauthorizedAccessException)
{
// ignore dir
result = null;
}
return result;
}
谢谢 R。
最佳答案
如果您不需要将整个结构加载到 TreeView 中,而只需要查看正在展开的内容,您可以这样做:
// Handle the BeforeExpand event
private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
if (e.Node.Tag != null) {
AddTopDirectories(e.Node, (string)e.Node.Tag);
}
}
private void AddTopDirectories(TreeNode node, string path)
{
node.BeginUpdate(); // for best performance
node.Nodes.Clear(); // clear dummy node if exists
try {
string[] subdirs = Directory.GetDirectories(path);
foreach (string subdir in subdirs) {
TreeNode child = new TreeNode(subdir);
child.Tag = subdir; // save dir in tag
// if have subdirs, add dummy node
// to display the [+] allowing expansion
if (Directory.GetDirectories(subdir).Length > 0) {
child.Nodes.Add(new TreeNode());
}
node.Nodes.Add(child);
}
} catch (UnauthorizedAccessException) { // ignore dir
} finally {
node.EndUpdate(); // need to be called because we called BeginUpdate
node.Tag = null; // clear tag
}
}
调用线路将是:
TreeNode root = new TreeNode(source_computer_fldbrowser.SelectedPath);
AddTopDirectories(root, source_computer_fldbrowser.SelectedPath);
treeView1.Nodes.Add(root);
关于c# - Treeview 控件 - ContextSwitchDeadlock 解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2135851/
我在 Debug模式下运行类似于以下代码的内容: for (int i = 0; i < 5000; i++) { for (int j = 0; j < 10; j++) {
我在 Windows 服务中有一个运行时间相当长的进程,它会定期抛出“ContextSwitchDeadlock”异常: 我还操纵我的服务向自己发送电子邮件,其中包含有关遇到的异常的详细信息。我得到:
我认为这是一个愚蠢的问题,但当我发现我无法执行以下操作时,我感到有点奇怪: EditingItem.FROM = EditingItem.TO = DateTime.Now; // FROM, T
我有 RichTextBox,我从多线程中记录大量消息。一段时间后,我第一次收到“DisconnectedContext was detected”消息,我从 Debug->Exceptions...
我在 c#(.net 3.5 cp,vs2010)中有一个类,它执行通常需要很长时间的复杂计算。一分钟后抛出异常,检测到 ContextSwitchDeadlock。异常是本地化的,我的非英语语言所以
我一直收到无法解决的错误消息。它源自 Visual Studio 或调试器。我不确定最终的错误情况是在 VS、调试器、我的程序还是数据库中。 这是一个 Windows 应用程序。不是网络应用。 来自
我构建了一个 TreeView 控件,列出了任何驱动器或文件夹的目录结构。但是,如果您选择一个驱动器,或者具有大型文件夹和子文件夹结构的东西,则控件需要很长时间才能加载,并且在某些情况下会显示 MDA
我有一个 Excel workbook 对象,其中包含一个 sheet,我想将其内容复制到 List. 我有这个方法: private Task GeneratePagesList() {
我正在运行一个 C# 应用程序,在运行时出现以下错误: The CLR has been unable to transition from COM context 0x20e480 to COM c
在运行单元测试时,我得到如下所示的 MDA。 在错误消息中,被称为“COM 上下文”的十六进制值是什么? 我可以确定给定 STA 线程的这个值吗?如果是,怎么办? Managed Debugging
我是一名优秀的程序员,十分优秀!