0

私は次の機能を持っています:

 public void AddPath(String full_path)
    {
        TreeView tree_view = TheTreeView;
        String[] split_path;
        TreeNodeCollection current_nodes;

        if (tree_view == null)
            return;
        if (String.IsNullOrEmpty(full_path))
            return;

        split_path = full_path.Split(tree_view.PathSeparator.ToCharArray());
        current_nodes = tree_view.Nodes;

        for (Int32 i = 0; i < split_path.Length; i++)
        {
            TreeNode[] found_nodes = current_nodes.Find(split_path[i], false);

            if (found_nodes.Length > 0)
            {
                current_nodes = found_nodes.First().Nodes;
            }
            else
            {
                TreeNode node;

                node = new TreeNode();
                node.Name = split_path[i]; // name is the same thing as key
                node.Text = split_path[i];

                current_nodes.Add(node);
                current_nodes = node.Nodes;
            }
        }
    }

別のスレッドからこの関数を呼び出す必要があります。どうすればいいですか?TreeView.Nodes.Add() を呼び出す方法は知っていますが、どうすればよいですか? 0.o

-スウェン

4

1 に答える 1

1

UI でオブジェクトを作成したスレッドとは異なるスレッドから呼び出す必要がある場合 (これがあなたのケースです)、答えは実際にはできないということです。より良い答えは、winform Control.Invokeと WPF Dispatcher.Invokeで呼び出すことです。このメソッドを使用して、invoke の呼び出しが実際に必要かどうかを調べることができるのは、winform のみです。一般に、コードが乱雑にならないように、UI を更新する部分から非同期部分を適切に分離する必要があります。

于 2012-06-28T10:41:15.857 に答える