проблема в работе с потоком - PullRequest
0 голосов
/ 14 апреля 2010

У меня есть древовидное представление, в котором у меня есть файловая система логического диска.Когда пользователь выбирает некоторые файлы и папки и нажимает кнопку, программа оценивает размер выбранных файлов и папок.эта функция может занять много времени.Я решил сделать поток, который будет запускать эту функцию.Эта функция работает с массивом TreeNode.но потом я хочу, чтобы теперь это был расширенный узел или нет, компилятор сказал: «попытка получить доступ к управлению« 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;
}

1 Ответ

2 голосов
/ 14 апреля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...