в последние часы я боролся с делегатами и доступом к элементам управления Windows Forms (C ++), где я использовал этот учебник (первый потокобезопасный метод): http://msdn.microsoft.com/en-us/library/ms171728.aspx#Y190
Изменение TextBoxes и Labels работаетотлично, но когда я хочу показать или скрыть весь графический интерфейс из другого потока, это не удается.
Я использую следующий метод (который является частью класса GUI):
System::Void UI::showUI(boolean value) {
if (this->InvokeRequired) {
SetTextDelegate^ d = gcnew SetTextDelegate(this, &UI::showUI);
this->Invoke(d, gcnew array<Object^> { value });
} else {
if (value == true)
this->Show();
else
this->Hide();
}
}
В первом вызове выражение if истинно, поэтому вызывается Invoke.Но обычно метод showUI должен вызываться автоматически второй раз, когда предложение if возвращает false, но этого не происходит.Таким образом, графический интерфейс не отображается и не скрывается.
Нужно ли показывать / скрывать GUI с делегатом или я могу сделать это из всех возможных потоков?Если необходим делегат, почему showUI не выполняется во второй раз?
Спасибо, Мартин
edit: ладно, имя SetTextDelegate не подходит, но это не главное ...