2009-01-14 50 views

回答

4

MSDN documentation on System.Windows.Forms.TreeView

任何公共静态共享在Visual 基本)此类型的成员都是线程安全的 。任何实例成员不是 保证是线程安全的。

幸运的是,没有在Windows窗体的机制来处理一个线程安全的方式从多个线程控制:

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 
    } 
} 

现在你可以从任何线程调用这个函数:

DoSomethingWithThisTree(new WhatToDo("something")); 

这将保证操作树的代码将在创建TreeView的线程中执行,因此它将是线程安全的。如果你不想从TreeView继承,你可以使用treeInstance.InvokeRequiredtreeInstance.Invoke()。

0

谢谢...

行“//你的函数的主体”给了我一个踢开始。

我已经与百达刚通过这种方法传递一些信息,以GUI对象approched这个...我从来没有想过给函数的整个身体放在那里

感谢

布拉德

+0

是这种方法的美妙之处在于函数会自行调用,就像在另一个线程中一样,如果你最初从同一个线程调用它,它根本不会执行任何调用。不幸的是,这不是我想出来的,这个方法实际上是在MSDN Library的某处提供的:) – 2009-01-14 01:31:32