тихий сбой 64-битной Win7 на ResumeLayout () с winforms и C # - PullRequest
3 голосов
/ 24 апреля 2011

Я создаю приложение Windows Forms на C #, и тестирование на Windows 7 64bit показало тихий сбой.

Точная строка, на которой происходит сбой, - this.ResumeLayout(false); в конце функции InitializeComponent().Это часть кода, сгенерированного Visual Studio из конструктора форм.

Нет никаких исключений, никаких всплывающих окон, показывающих, что программа вылетела, ничего.Он просто перестает работать, как только достигает этой линии.Это происходит только в 64-битной версии.Удаляя эту строку, программа запускается, но не может быть развернута, и есть несколько других странностей, связанных со свойствами окна.

Я пробовал все от изменения настроек сборки до использования CorFlags.exe Ничего не помогло.В чем может быть проблема?

Если это имеет значение, я использую OpenTK и элементы управления GL.

Ответы [ 4 ]

1 голос
/ 29 января 2014

У меня была точно такая же проблема с ResumeLayout (). Он работал нормально на нескольких машинах, но у меня был один пользователь, который выдавал «Исключение было выдано целью вызова». Не очень полезно. К сожалению, они также скрывают некоторые детали из Exception.StackTrace. Я проконсультировался с нашим экспертом-резидентом, и он почувствовал, что это проблема изменения размеров. Я обнаружил, где именно проблема была после перехода к DEBUG -> Исключения и выбора всего. Затем я получил перерыв прямо внутри функции, которую использовал, чтобы переместить некоторые флажки. По какой-то причине это выдало исключение вне диапазона для ящика этого пользователя ...

Прямоугольник rect = dataGridView.GetCellDisplayRectangle (col, row, true);

Дело в том, что выбор разрыва для исключений, как я описал, помог мне точно определить реальную проблему. Обходной путь, о котором упоминали другие, хорош, но в этом случае мне удалось найти основную причину.

1 голос
/ 27 сентября 2012

У меня была идентичная проблема, только в моем случае программное обеспечение работало на некоторых 64-битных системах, а не на других.Например, мой ноутбук Vaio PCG серии, купленной только в этом году.64-разрядная версия Windows 7 Home Edition, разрешение 1600 x 900.Программа работает очень хорошо здесь.У моего коллеги есть серия vaio svz, 64-битная Windows Professional с разрешением 1920 x 1080, и по какой-то причине он все время получал тихий сбой при вызове ResumeLayout(false).

Опять же, комментируя вызов this->SuspendLayout() в верхней части подпрограммы INitializeComponents(), а вызов this->ResumeLayout(false) в нижней части, решил проблему, и теперь программа работает нормально на обеих системах.

0 голосов
/ 25 апреля 2011

Простым решением всего этого испытания было просто удалить как вызывающий вызов вызов ResumeLayout (), так и соответствующий вызов SuspendLayout () в начале функции InitializeComponent ().Кажется, он не оказал вредного влияния на расположение окна, несмотря на большое количество элементов управления в окне.Опять же, это было только для 64-битных машин, проблема никогда не возникала в Windows XP или 32-битной версии 7.

Я все еще озадачен тем, почему вызов ResumeLayout () вызывал тихий сбой в первомместо, и все еще немного неловко по поводу «решения», но, похоже, сработало.

0 голосов
/ 24 апреля 2011

Вы используете какой-нибудь внешний компонент?
Какой-то OCX, который не совместим с 64-битным?У меня были те же проблемы с использованием GdPicture.Если это так, попробуйте скомпилировать 32-битную версию, и проблема может быть решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...