使用线程的问题

时间:2010-04-14 10:36:10

标签: .net visual-c++

我有树视图,其中我有逻辑磁盘的文件系统。当用户选择一些文件和文件夹并按下按钮程序时,评估所选文件和文件夹的大小。此功能可能需要很长时间。我决定做运行这个功能的线程。此函数适用于TreeNode数组。但后来我想现在是节点expaned或不编译器说:“尝试访问控件”treeview1“不是从创建它的线程。”为什么会出现?下一个代码显示我如何创建我发送到新线程的节点数组:

void frmMain::FillSelected(TreeNode^ a, array<TreeNode^>^ *Paths) {
    if (a->Parent == nullptr) {
        for(int j = 0;j < a->Nodes->Count;j++) {
            if ((a->Nodes[j]->ImageIndex == 1)&&(a->Nodes[j]->Checked==true)) {
                (*Paths)->Resize((*Paths), (*Paths)->Length + 1);
                (*Paths)[(*Paths)->Length-1] = a->Nodes[j];
            }
        }
    }
    for(int i = 0;i < a->Nodes->Count;i++) {
        if (a->Parent == nullptr) {
         FillSelected(a->Nodes[i], Paths);
        } else {
            if(a->Nodes[i]->Checked == true) {
                (*Paths)->Resize((*Paths), (*Paths)->Length + 1);
                (*Paths)[(*Paths)->Length-1] = a->Nodes[i];
            }
            if ((a->Nodes[i]->Nodes->Count > 0)&&(a->Nodes[i]->Nodes[0]->FullPath != (a->Nodes[i]->FullPath + "\\"))) {
                FillSelected(a->Nodes[i], Paths);
            }
        }
    }
    return;
}