Я запрашиваю строку с текстом, которую вывожу в textBox
char* log;
if (getLogMess(log)) logTextBox->Text += gcnew String(log) + "\n";
Что мне нужно сделать дальше:
- Сделать автоматический запрос новой строки
- Добавить возможность отключения и включения авто запросов.
Я хотел всё реализовать в отдельном потоке с бесконечным циклом, но в CLI нельзя изменять формы в отдельном потоке
void MyForm::updateLog() {
char* log;
while (true) {
if (getLogMess(log)) logTextBox->Text += gcnew String(log) + "\n";
}
}
Thread^ updateLogThread = gcnew Thread(gcnew ThreadStart(this, &MyForm::updateLog));
updateLogThread->Start();
Как быть?
UPD
Рабочий вариант:
delegate void StringArgReturningVoidDelegate();
Thread^ updateLogThread = gcnew Thread(gcnew ThreadStart(this, &MyForm::updateLog));
updateLogThread->Start();
char* log;
void MyForm::updateLog() {
while (true) {
if (this->logTextBox->InvokeRequired) {
StringArgReturningVoidDelegate^ d =
gcnew StringArgReturningVoidDelegate(this, &MyForm::updateLog);
this->Invoke(d);
} else {
if (!getLogMess(log)) return;
this->logTextBox->Text += gcnew String(log) + "\r\n";
}
Threading::Thread::Sleep(50);
}
}