C# 多线程读取注册表,加载至TreeView
时间:2023-04-08 14:52:27
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;
using Microsoft.Win32;
namespace 星空个性化助手
{
public partial class Form1 : Form
{
private delegate void LoadTreeView左侧( TreeNode node );//声明委托类型
public Form1()
{
InitializeComponent ();
}
private void Form1_Load( object sender , EventArgs e )
{
Thread thread = new Thread (new ThreadStart (ReadAllReg));
thread.Start ();
}
/// <summary>
/// 读取注册表
/// </summary>
private void ReadAllReg()
{
LoadTreeView左侧 loadTreeView = new LoadTreeView左侧 (SendToTreeView);
RegistryKey reg = Registry.ClassesRoot;
TreeNode node = new TreeNode ("HKEY_CLASSES_ROOT");
ReadRegistry (reg , node);
reg.Close ();
if( treeView左侧.InvokeRequired )//将读取的根加载至TreeView
treeView左侧.BeginInvoke (loadTreeView , node);
else
{
treeView左侧.Nodes.Add (node);
}
/*----------------------------------------------------*/
reg = Registry.CurrentUser;
node = new TreeNode ("HKEY_CURRENT_USER");
ReadRegistry (reg , node);
reg.Close ();
if( treeView左侧.InvokeRequired )//将读取的根加载至TreeView
treeView左侧.BeginInvoke (loadTreeView , node);
else
{
treeView左侧.Nodes.Add (node);
}
/*----------------------------------------------------*/
reg = Registry.LocalMachine;
node = new TreeNode ("HKEY_LOCAL_MACHINE");
ReadRegistry (reg , node);
reg.Close ();
if( treeView左侧.InvokeRequired )//将读取的根加载至TreeView
treeView左侧.BeginInvoke (loadTreeView , node);
else
{
treeView左侧.Nodes.Add (node);
}
/*----------------------------------------------------*/
reg = Registry.Users;
node = new TreeNode ("HKEY_USERS");
ReadRegistry (reg , node);
reg.Close ();
if( treeView左侧.InvokeRequired )//将读取的根加载至TreeView
treeView左侧.BeginInvoke (loadTreeView , node);
else
{
treeView左侧.Nodes.Add (node);
}
/*----------------------------------------------------*/
reg = Registry.CurrentConfig;
node = new TreeNode ("HKEY_CURRENT_CONFIG");
ReadRegistry (reg , node);
reg.Close ();
if( treeView左侧.InvokeRequired )//将读取的根加载至TreeView
treeView左侧.BeginInvoke (loadTreeView , node);
else
{
treeView左侧.Nodes.Add (node);
}
}
/// <summary>
/// 发送到TreeView
/// </summary>
/// <param name="node">TreeNode</param>
private void SendToTreeView( TreeNode node )
{
treeView左侧.Nodes.Add (node);
treeView左侧.Refresh ();
}
/// <summary>
/// 递归注册表树
/// </summary>
/// <param name="reg">注册表起始点</param>
/// <param name="nodes">起始树,将在它下面建立所有子结点</param>
internal void ReadRegistry( RegistryKey reg , TreeNode nodes )//递归注册表树
{
foreach( string names in reg.GetSubKeyNames () )
{
TreeNode node = new TreeNode (names);
try
{
RegistryKey r = reg.OpenSubKey (names , false);
if( r != null )
{
ReadRegistry (r , node);
r.Close ();
}
else
{
return;
}
}
catch( Exception err )
{
continue;
}
nodes.Nodes.Add (node);
}
}
}
}
标签:C#,多线程,注册表,TreeView
0
投稿
猜你喜欢
java 中类似js encodeURIComponent 函数的实现案例
2023-03-20 13:13:50
Kotlin协程launch原理详解
2023-05-19 09:36:01
Android自定义轮播图效果
2022-10-27 06:31:26
Java中反射动态 代理接口的详解及实例
2023-11-28 05:29:36
基于Java+SpringBoot+Vue前后端分离实现仓库管理系统
2023-11-01 04:21:22
C#实现斐波那契数列的几种方法整理
2023-09-02 05:05:58
Android 利用反射+try catch实现sdk按需引入依赖库的方法
2022-09-19 22:09:08
SpringBoot程序的打包与运行的实现
2023-11-29 15:51:27
java 字段值为null,不返回该字段的问题
2023-07-13 10:32:34
Java设计模式编程中的工厂方法模式和抽象工厂模式
2023-03-19 05:50:48
浅谈关于Java的GC垃圾回收器的一些基本概念
2021-11-14 10:42:52
C#中public变量不能被unity面板识别的解决方案
2022-03-26 18:17:18
Android Activity与Intent详解及示例代码
2023-07-13 17:10:33
java元注解@Inherited的使用详解
2023-09-15 04:58:48
python调用java模块SmartXLS和jpype修改excel文件的方法
2023-06-11 16:59:21
再谈java回调函数
2023-09-27 19:20:10
在Eclipse安装Spring boot插件的步骤(图文)
2023-01-14 05:04:05
Android自定义View绘制的方法及过程(二)
2023-05-02 14:42:17
Java JDK11基于嵌套的访问控制的实现
2021-07-11 10:02:05
在Java中按值调用和按引用调用
2021-12-26 20:09:21