2010-04-14 2 views
0

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

я вижу этот вопрос задают по крайней мере один раз в неделю на SO. действительно ли так сложно ввести текст ошибки в Google? – Andrey

ответ

2
+0

thx. Но у меня есть некоторые вопросы. Если я хочу работать с некоторыми частями элемента пользовательского интерфейса (это всего лишь 3 свойства TreeNode), и я делаю класс, и он был основан на MC++ и имеет ли только эти свойства это правильное решение этой проблемы? – Xaver