Необработанное исключение типа "System.ApplicationException" произошло в System.Drawing.dll

У меня есть приложение winforms. В режиме разработки при отладке из Visual Studio.NET 2003 (да, я знаю, что он старый, но это устаревший проект), я получаю эту ошибку, когда пытаюсь открыть новую форму. Чтобы открыть новую форму, я получаю экземпляр формы, а затем я вызываю метод ShowDialog(), например:

frmTest test = new frmTest(here my parameters);
test.ShowDialog();

Если я нажму F11 (шаг в) при отладке, это не сбой, но если в строке, где я создаю форму, я нажимаю F10, чтобы перейти в следующую строку, то есть test.ShowDialog(), после чего она выдает эту ошибку.

Полная ошибка сообщения:

"Необработанное исключение типа" System.ApplicationException "произошло в System.drawing.dll. Дополнительная информация: была сделана попытка освободить взаимное исключение, которое не относится к процессу".

Я перевел последнюю часть: Дополнительная информация... поскольку она появлялась на испанском языке.

Форма, которую я создаю с параметрами, ее конструктор, состоит в том, чтобы инициализировать некоторые переменные, например:

public frmTest(string param1, string param2)
{
   InitializeComponent();

   this.param1 = param1;
   this.param2 = param2;
}

private void frmTest_Load(object sender, EventArgs e)
{
    // here I call a remote webservice asynchronously.
}

Также моя форма "frmTest" имеет четыре изображения, ярлык и кнопку. Три из изображений содержат png-изображение (оно назначается во время разработки через свойство Image), последний картинный блок содержит анимированный gif, также загружаемый во время разработки через свойство Image. Возможно, ошибка возникает из-за этих изображений?

Ответ 1

Исключения приложений не выбрасываются самой картой: what-is-applicationexception-for-in-net; Проблема должна заключаться в коде, который у вас нет. Также не забудьте проверить свойство InvokeRequired перед выполнением действия, и если это так, запустите метод, используя метод "Invoke". Для этого можно проверить проблему c-sharp-cross-thread-call.

Ответ 2

Может быть, асинхронный вызов пытается получить доступ к потоку пользовательского интерфейса.

Убедитесь, что вы не используете свойства TextBox.Text управления, такие как TextBox.Text. Если это так, вам просто нужно передать его значение асинхронному вызову или сохранить его в переменной класса перед вызовом.

Кроме того, внутри асинхронного вызова вы не можете присваивать значения этим свойствам. Вместо этого используйте Invoke().