2009-01-14 8 views
0

Je cherche des informations sur l'utilisation d'un treeview en toute sécurité. Est-ce que quelqu'un a experance avec ceci ou sait de quelques liens en ligne à la recherche.C# treeview opérations threadsafe

Merci

Répondre

4

De l'MSDN documentation on System.Windows.Forms.TreeView:

Tout public static (Shared en Visual Basic) de ce type sont thread sûr. Tous les membres d'instance ne sont pas garanti être thread-safe.

Heureusement pour vous, il y a un mécanisme dans Windows Forms pour gérer les contrôles de plusieurs threads dans un fil de manière sûre:

public delegate void TreeActionDelegate(WhatToDo details); 

public void DoSomethingWithThisTree(WhatToDo details) 
{ 
    // Assuming that 'this' points to a TreeView 
    if (this.InvokeRequired) this.Invoke(new TreeActionDelegate(), 
     new object[] { details }); 
    else 
    { 
     // The body of your function 
    } 
} 

Maintenant, vous pouvez appeler cette fonction de tout fil:

DoSomethingWithThisTree(new WhatToDo("something")); 

Cela garantira que le code qui manipule votre arborescence sera exécuté dans le thread qui a créé TreeView, il sera donc thread-safe. Si vous ne voulez pas hériter de TreeView, vous pouvez simplement utiliser treeInstance.InvokeRequired et treeInstance.Invoke().

0

Merci ...

la ligne « // le corps de votre fonction » m'a donné un coup de fouet.

J'ai AllWays approched cela avec juste passer des informations à l'objet GUI par cette méthode ... Je ne pensais pas à placer le corps de la fonction y

Merci

Brad

+0

Oui la beauté de cette approche que la fonction va invoquer elle-même, juste dans un autre thread et si vous l'invoquez à partir du même thread initialement, il ne fera aucune invocation du tout. Malheureusement, ce n'est pas moi qui en ai eu l'idée, cette méthode est en fait suggérée quelque part dans la bibliothèque MSDN :) –