Необработанное исключение типа "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()
.