Я не уверен в правильном использовании Control-> Invoke () с .NET, C ++ и Windows Forms.
Например, с помощью такого метода:
System::Void UI::setStatusText(System::String^ text) {
if (this->InvokeRequired) {
SetTextDelegate^ d = gcnew SetTextDelegate(this, &UI::setStatusText);
statusLabel->Invoke(d, gcnew array<Object^> { text }); // <-- System.ExecutionEngineException
} else
statusLabel->Text = text;
}
Это правильно ?? Этот метод выполняется произвольным потоком и должен изменить текст statusLabel.
Делегат объявлен как:
delegate void SetTextDelegate(System::String^ text);
Но довольно часто я получаю исключение System.ExecutionEngineException в отмеченной строке.
Что не так с этим кодом?
Спасибо,
Martin
edit: visual studio сообщает, что в mscorlib.dll есть неуправляемое исключение типа System.ExecutionEngineException, и зеленая стрелка отладки указывает на отмеченную строку. Это трассировка стека: http://sharetext.org/B8RR. Но как я могу получить внутреннее исключение? Или, если это не вызвано этими строками кода, что еще я могу сделать, чтобы выяснить ошибку?