Показать сообщение отдельно
Старый 22.02.2013, 00:57   #1
ІГРОГРАЙКО
ПроЭктировщик
 
Аватар для ІГРОГРАЙКО
 
Регистрация: 20.06.2009
Адрес: Україна
Сообщений: 152
Написано 10 полезных сообщений
(для 24 пользователей)
Доступ к GUI с иного потока

Добрый вечер вам!

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;
			}
Но сразу же после старта потока вылетает екзепшн:
Нажмите на изображение для увеличения
Название: exception.png
Просмотров: 1845
Размер:	23.3 Кб
ID:	18837

Пожалуйста подскажите, как это лучше исправить! Можно ли обойтись без множества блоков try-catch?
Заранее спасибо!
__________________
Blitz3D, XNA, WebGL, OpenGL, Unity3D
PC: ASUS A55VM Core i3 (2.4Ghz), 6 Gb RAM, Nvidia GF 630M GT 2Gb
(Offline)
 
Ответить с цитированием