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
  • asp之家 软件编程 m.aspxhome.com