Salve,
sto tentando i primi passi in .NET e C# e come test ho scelto di realizzare una specie di Regedit tanto per familiarizzare un po con i nuovi concetti e la sintassi.
Ho quindi fatto una funzione ricorsiva che riempie una TreeView con le chiavi di registro.
Funziona perfettamente ma a livello di prestazioni non ci siamo proprio![]()
ho provato a spargere un po di Application.DoEvents (); ma la risposta fa + o -![]()
Credo proprio che una differenza di prestazioni cosi evidente fra il mio codice e il vero Regetit denoti un chiaro errore concettuale, ma quale :master: :master:
Forse il fatto che Regedit quando lo apro si ricorda i rami aperti in precedenza significa qualcosa?
Qui c'è il codice:
private void frmRegistryBrowser_Load(object sender, System.EventArgs e)
{
TreeNode RootNode = new TreeNode("Risorse del computer");
RootNode.ImageIndex = 0;
trv.Nodes.Add (RootNode);
trv.Refresh();
loadRegistryKeys(RootNode);
}
private void loadRegistryKeys(TreeNode RootNode)
{
RegistryKey OurKey = Registry.ClassesRoot;
makeTreeRootNode(RootNode, OurKey );
OurKey = Registry.CurrentUser;
Application.DoEvents ();
makeTreeRootNode(RootNode, OurKey );
// ecc.ecc...
}
private void getSubKeys(TreeNode subNode, RegistryKey SubKey)
{
trv.Refresh();
Application.DoEvents ();
foreach(string sub in SubKey.GetSubKeyNames() )
{
TreeNode NewSubNode = new TreeNode(sub);
NewSubNode.ImageIndex =1;
NewSubNode.SelectedImageIndex =2;
subNode.Nodes.Add(NewSubNode);
try
{
RegistryKey localKey = SubKey.OpenSubKey(sub,true);
if (localKey.SubKeyCount > 0)
{
getSubKeys(NewSubNode,localKey);
}
}
catch(Exception e)
{
Console.WriteLine (e.ToString ());
}
}
}
private void makeTreeRootNode(TreeNode RootNode, RegistryKey RootKey)
{
TreeNode KeyRootNode = new TreeNode(RootKey.Name);
KeyRootNode.ImageIndex = 1;
KeyRootNode.SelectedImageIndex=2;
RootNode.Nodes.Add (KeyRootNode);
getSubKeys(KeyRootNode, RootKey);
}

