Как правило, вы не должны выполнять работу с графическим интерфейсом вне основного потока / потока приложения. Я бы сделал метод ShowMessageBox в родительской форме, который может сделать Invoke:
public DialogResult ShowMessageBox (String message, String caption)
{
if (this.InvokeRequired) {
return (DialogResult) this.Invoke (new PassStringStringReturnDialogResultDelegate (ShowMessageBox), message, caption);
}
return MessageBox.Show (this, message, caption);
}
public delegate DialogResult PassStringStringReturnDialogResultDelegate (String s1, String s2);
НО ТАКЖЕ ПРОДОЛЖАЙТЕ: при отладке многопоточного приложения с графическим интерфейсом и при отладке в потоке, отличном от основного потока / потока приложения, ВЫ ДОЛЖНЫ ВЫКЛЮЧИТЬ «Включить оценку свойства и другие неявные вызовы функций» option, иначе VS будет автоматически извлекать значения локальных / глобальных объектов GUI ИЗ ТЕКУЩЕЙ РЕЗЬБЫ, что приведет к аварийному завершению / сбою приложения. Перейдите в Инструменты-> Параметры-> Отладка, чтобы отключить этот параметр.
Извините за заглавные буквы, но мне потребовались ДНИ, чтобы понять, почему я каждый раз, когда я пытался отладить свое приложение, зависало, а затем вылетало.