C# 多线程读取注册表,加载至TreeView
- 作者: 姐就是姐_别侮辱姐
- 来源: 51数据库
- 2021-10-19
复制代码 代码如下:
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#通过fleck实现wss协议的WebSocket多人Web实时聊天(附源码)
- 团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
- 使用 MSBuild.exe 在发布模式下构建 C# 解决方案
- 当我发布 Web 应用程序时,AfterPublish 脚本不运行
- 构建时 T4 转换的产品仅在下一个构建中使用
- ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
- 新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
- 如何将条件编译符号(DefineConstants)传递给 msbuild
- MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
- NuGet 包还原找不到包,没有源
热点文章
团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
0
使用 MSBuild.exe 在发布模式下构建 C# 解决方案
0
当我发布 Web 应用程序时,AfterPublish 脚本不运行
0
构建时 T4 转换的产品仅在下一个构建中使用
0
ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
0
新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
0
如何将条件编译符号(DefineConstants)传递给 msbuild
0
MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
0
NuGet 包还原找不到包,没有源
0
使用 C# 6.0 功能运行 TFS 构建
0