Добрый вечер вам!
CLR приложение (.Net средствами С++).
У меня есть форма, в форме есть контролы такие как кнопка, прогрес-бар, дата-грид-виев (таблица).
Все ето создавалось в основном потоке.
У меня появился новый поток после клика на кнопку и етот поток должен:
- перерисовывать прогрес-бар
- добавлять ечейки в дата-грид-виев
- установить доступность (Enabled) кнопки в значение "true"
Вот код где состоялся клик и запустился новый поток:
public:
Thread^ processing;
FileBase^ fileBase;
...
private: System::Void buttonStart_Click(System::Object^ sender, System::EventArgs^ e) {
buttonStart->Enabled = false;
resultView->Rows->Clear();
array<String^>^ tmp = gcnew array<String^>(directoryList->Items->Count);
directoryList->Items->CopyTo(tmp,0);
fileBase = gcnew FileBase(tmp, checkboxSearchSubdir->Checked);
ThreadStart^ fileBaseDelegate = gcnew ThreadStart(this, &mainForm::DoProcessing);
processing = gcnew Thread(fileBaseDelegate);
processing->Start();
}
Вот код функции что будет выполнять поток:
public: void DoProcessing()
{
progressBar->Value = 0;
progressBar->Maximum = fileBase->candidates->Count;
for each(KeyValuePair<String^,Int64> iCandidate in fileBase->candidates)
{
if (fileBase->IsDuplicate(iCandidate))
resultView->Rows->Add(iCandidate.Key , iCandidate.Value.ToString());
progressBar->Value++;
}
buttonStart->Enabled = true;
}
Но сразу же после старта потока вылетает екзепшн:
Пожалуйста подскажите, как это лучше исправить! Можно ли обойтись без множества блоков try-catch?
Заранее спасибо!