c++ Builder XE2 - usuwanie komponentów w wątku

0

Mam problem z poniższym fragmentem kodu. Przy wywołaniu metody DestroyComponents() wywala mi bugi list index out of bounds bądź acces violation at adress ...

HANDLE watek;
DWORD ThreadID;
int DataThread = 1;

unsigned long __stdcall watek_x(void *Arg)
{
        ScrollBox1->DestroyComponents();
        ScrollBox1->Enabled = true;
        //tutaj włączanie buttonów wyzwalających funkcje które bazują na komponentach w scroll boksie
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        ScrollBox1->Enabled = false;
        //tutaj wyłączanie buttonów wyzwalających funkcje które bazują na komponentach w scroll boksie
	watek=CreateThread(NULL, 0, watek_x, &DataThread, 0, &ThreadID);
	if (watek == NULL) ExitProcess(DataThread);
}

Natomiast jak wywalę wątek i uruchomię to w wątku głównym problemu nie ma...

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        ScrollBox1->Enabled = false;
        ScrollBox1->DestroyComponents();
        ScrollBox1->Enabled = true;
}

Więc problem raczej leży w wątku. Ma ktoś pomysł co robię źle?

0

Jeżeli zmieniasz coś w wątku VCL z własnego wątku to powinieneś użyć Synchronize()

1 użytkowników online, w tym zalogowanych: 0, gości: 1