многопоточность — обновление пользовательского интерфейса из другого приложения c ++ Windows Form

Я хотел бы обновить поток пользовательского интерфейса из потока, который я создал с помощью этой функции:

CreateThread

Вот мой код

[STAThread]
void Main(array<String^>^ args) {
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);

gRecvSockThread = CreateThread(NULL, 0, recvSocket, NULL, 0, NULL);

MyApp::MyForm form;
Application::Run(%form);
}

DWORD WINAPI recvSocket(void *arg) {

char recvbuf[8];
RtlZeroMemory(recvbuf, 8);
while (gSocket->getStateSocket() != -1) {
int iResult = recv(gSocket->getSocketFD(), recvbuf, 8, MSG_WAITALL);
if (iResult > 0) {
if (strcmp("accepted", recvbuf) == 0) {
//updateUIValidated(); //here I would like to access a label and make it visible for example..
}
else {
//updateUIRejected();
}
}

}
return 0;
}

0

Решение

Решено с помощью System::Threading; вместо CreateThread и создайте атрибут делегата.
Свяжите этот атрибут с методом, который обновит интерфейс:

delegateUpdateUI = gcnew UpdateUI(this, &MyForm::UpdateUIMethod);

И тогда в моей теме я звоню:

Invoke(delegateAcceptedUI);

И заканчивай 🙂

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]