zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C#多线程读取注册表,加载至TreeView

c#多线程 读取 加载 注册表 treeview
2023-06-13 09:14:12 时间
复制代码代码如下:

usingSystem;
usingSystem.Drawing;
usingSystem.Windows.Forms;
usingSystem.Threading;
usingMicrosoft.Win32;
namespace星空个性化助手
{
publicpartialclassForm1:Form
{
privatedelegatevoidLoadTreeView左侧(TreeNodenode);//声明委托类型
publicForm1()
{
InitializeComponent();
}
privatevoidForm1_Load(objectsender,EventArgse)
{
Threadthread=newThread(newThreadStart(ReadAllReg));
thread.Start();
}
///<summary>
///读取注册表
///</summary>
privatevoidReadAllReg()
{
LoadTreeView左侧loadTreeView=newLoadTreeView左侧(SendToTreeView);
RegistryKeyreg=Registry.ClassesRoot;
TreeNodenode=newTreeNode("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=newTreeNode("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=newTreeNode("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=newTreeNode("HKEY_USERS");
ReadRegistry(reg,node);
reg.Close();
if(treeView左侧.InvokeRequired)//将读取的根加载至TreeView
treeView左侧.BeginInvoke(loadTreeView,node);
else
{
treeView左侧.Nodes.Add(node);
}
/*----------------------------------------------------*/
reg=Registry.CurrentConfig;
node=newTreeNode("HKEY_CURRENT_CONFIG");
ReadRegistry(reg,node);
reg.Close();
if(treeView左侧.InvokeRequired)//将读取的根加载至TreeView
treeView左侧.BeginInvoke(loadTreeView,node);
else
{
treeView左侧.Nodes.Add(node);
}
}
///<summary>
///发送到TreeView
///</summary>
///<paramname="node">TreeNode</param>
privatevoidSendToTreeView(TreeNodenode)
{
treeView左侧.Nodes.Add(node);
treeView左侧.Refresh();
}
///<summary>
///递归注册表树
///</summary>
///<paramname="reg">注册表起始点</param>
///<paramname="nodes">起始树,将在它下面建立所有子结点</param>
internalvoidReadRegistry(RegistryKeyreg,TreeNodenodes)//递归注册表树
{
foreach(stringnamesinreg.GetSubKeyNames())
{
TreeNodenode=newTreeNode(names);
try
{
RegistryKeyr=reg.OpenSubKey(names,false);
if(r!=null)
{
ReadRegistry(r,node);
r.Close();
}
else
{
return;
}
}
catch(Exceptionerr)
{
continue;
}
nodes.Nodes.Add(node);
}
}
}
}