0

ツリービューをセーフスレッドで使用する方法に関する情報を探しています。これを経験した人はいますか、または研究へのオンラインリンクを知っていますか.

ありがとう

4

2 に答える 2

4

System.Windows.Forms.TreeView に関する MSDN ドキュメントから:

この型のpublic static ( Visual Basic ではShared ) メンバーはすべて、スレッド セーフです。インスタンス メンバーは、スレッド セーフであるとは限りません。

幸いなことに、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.InvokeRequiredandのみを使用できますtreeInstance.Invoke()。

于 2009-01-14T01:16:37.373 に答える
0

ありがとう...

「//関数の本体」という行は、私にキックスタートを与えました。

私はいつもこの方法でGUIオブジェクトに情報を渡すだけでこれにアプローチしてきました...関数の本体全体をそこに置くとは思いもしませんでした

ありがとう

ブラッド

于 2009-01-14T01:24:07.560 に答える