У меня есть функция, которая "имитирует" шахматные файлы PGN .txt.
Функция выглядит так:
PGNFileEinlesen^ pGN = gcnew PGNFileEinlesen(cBoxDateiNamen->Text);
Simulation::DctFigur = dctFigur;
//reset(Reset.Komplett);
// Den Header in die Textbox schreiben
for each(String^ s in pGN->CsvHeader)
{
rTextBoxZuege->AppendText(s + Environment::NewLine);
}
rTextBoxZuege->AppendText(Environment::NewLine);
// Sleep vor erstem Zug
System::Threading::Thread::Sleep(zeitIntervall);
for (int i = 1; i <= pGN->DtcZuege->Count; i++)
{
// Falls Siegesbedingung oder Spiel vorzeitit beendet: (*)
// 1-0 --> weiss gewinnt
// 0-1 --> schwarz gewinnt
// 1/2-1/2 --> Remi
// * --> Partie ist noch nicht beendet
addTextRichTextbox(i, pGN->DtcZuege[i]->Split(' ')[0]);
if (partieBeendet(pGN->DtcZuege[i]->Split(' ')[0]))
{
return;
}
Simulation::Zug(pGN->DtcZuege[i]->Split(' ')[0], Farbe::Weiss);
try
{
simulationsZug();
}
catch (Exception^ e)
{
Console::WriteLine("SimulationsZug() " + e->Message);
}
System::Threading::Thread::Sleep(zeitIntervall);
this->farbeAmZug = farbeAmZugAendern();
addTextRichTextbox(pGN->DtcZuege[i]->Split(' ')[1]);
if (partieBeendet(pGN->DtcZuege[i]->Split(' ')[1]))
{
btnReset->PerformClick();
return;
}
Simulation::Zug(pGN->DtcZuege[i]->Split(' ')[1], Farbe::Schwarz);
try
{
simulationsZug();
}
catch (Exception^ e)
{
Console::WriteLine("SimulationsZug() " + e->Message);
}
System::Threading::Thread::Sleep(zeitIntervall);
this->farbeAmZug = farbeAmZugAendern();
}
btnReset->Enabled = true;
Теперь проблема в том, что если я запустил симуляцию, весь графический интерфейс зависнет, пока функция не достигнет конца цикла for.
Я пытался создать новую тему:
threadSimulation = gcnew Thread(gcnew ThreadStart(this, &Schachfeld::test));
threadSimulation->Start();
но я получаю ошибку, что мой поток перекрывается с фактическим потоком, потому что я обращаюсь к элементам управления из исходного потока.
(и функции тоже)
Может ли кто-нибудь объяснить мне, что я должен делать? Я не нашел много по гуглу.
Спасибо!