Темы в c ++ / cli - PullRequest
       13

Темы в c ++ / cli

0 голосов
/ 17 мая 2018

У меня есть функция, которая "имитирует" шахматные файлы 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();

но я получаю ошибку, что мой поток перекрывается с фактическим потоком, потому что я обращаюсь к элементам управления из исходного потока. (и функции тоже)

Может ли кто-нибудь объяснить мне, что я должен делать? Я не нашел много по гуглу.

Спасибо!

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