c sharp multithreading reads the registry and loads it to TreeView

  • 2020-05-05 11:50:17
  • OfStack


using System; 
using System.Drawing; 
using System.Windows.Forms; 
using System.Threading; 
using Microsoft.Win32; 
namespace  Star personalized assistant  
{ 
public partial class Form1 : Form 
{ 
private delegate void LoadTreeView On the left side of the ( TreeNode node );// Declare delegate type  
public Form1() 
{ 
InitializeComponent (); 
} 
private void Form1_Load( object sender , EventArgs e ) 
{ 
Thread thread = new Thread (new ThreadStart (ReadAllReg)); 
thread.Start (); 
} 
/// <summary> 
///  Read registry  
/// </summary> 
private void ReadAllReg() 
{ 
LoadTreeView On the left side of the  loadTreeView = new LoadTreeView On the left side of the  (SendToTreeView); 
RegistryKey reg = Registry.ClassesRoot; 
TreeNode node = new TreeNode ("HKEY_CLASSES_ROOT"); 
ReadRegistry (reg , node); 
reg.Close (); 
if( treeView On the left side of the .InvokeRequired )// Load the read root into TreeView 
treeView On the left side of the .BeginInvoke (loadTreeView , node); 
else 
{ 
treeView On the left side of the .Nodes.Add (node); 
} 
/*----------------------------------------------------*/ 
reg = Registry.CurrentUser; 
node = new TreeNode ("HKEY_CURRENT_USER"); 
ReadRegistry (reg , node); 
reg.Close (); 
if( treeView On the left side of the .InvokeRequired )// Load the read root into TreeView 
treeView On the left side of the .BeginInvoke (loadTreeView , node); 
else 
{ 
treeView On the left side of the .Nodes.Add (node); 
} 
/*----------------------------------------------------*/ 
reg = Registry.LocalMachine; 
node = new TreeNode ("HKEY_LOCAL_MACHINE"); 
ReadRegistry (reg , node); 
reg.Close (); 
if( treeView On the left side of the .InvokeRequired )// Load the read root into TreeView 
treeView On the left side of the .BeginInvoke (loadTreeView , node); 
else 
{ 
treeView On the left side of the .Nodes.Add (node); 
} 
/*----------------------------------------------------*/ 
reg = Registry.Users; 
node = new TreeNode ("HKEY_USERS"); 
ReadRegistry (reg , node); 
reg.Close (); 
if( treeView On the left side of the .InvokeRequired )// Load the read root into TreeView 
treeView On the left side of the .BeginInvoke (loadTreeView , node); 
else 
{ 
treeView On the left side of the .Nodes.Add (node); 
} 
/*----------------------------------------------------*/ 
reg = Registry.CurrentConfig; 
node = new TreeNode ("HKEY_CURRENT_CONFIG"); 
ReadRegistry (reg , node); 
reg.Close (); 
if( treeView On the left side of the .InvokeRequired )// Load the read root into TreeView 
treeView On the left side of the .BeginInvoke (loadTreeView , node); 
else 
{ 
treeView On the left side of the .Nodes.Add (node); 
} 
} 
/// <summary> 
///  Sent to the TreeView 
/// </summary> 
/// <param name="node">TreeNode</param> 
private void SendToTreeView( TreeNode node ) 
{ 
treeView On the left side of the .Nodes.Add (node); 
treeView On the left side of the .Refresh (); 
} 
/// <summary> 
///  Recursive registry tree  
/// </summary> 
/// <param name="reg"> Registry start point </param> 
/// <param name="nodes"> The start tree, we're going to create all the children under it </param> 
internal void ReadRegistry( RegistryKey reg , TreeNode nodes )// Recursive registry tree  
{ 
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); 
} 
} 
} 
} 

Related articles: