На платформе WindowsCE (специальная сборка) наш графический интерфейс C# использует обычные формы для отображения «всплывающего меню». Мы устанавливаем для FormBorderstyle значение None, так как мы не хотим, чтобы элементы управления формы были видны.
Некоторые клиенты через некоторое время сообщали о «серых ящиках». После некоторого тестирования здесь мы смогли довольно быстро воспроизвести проблему. Когда мы постоянно открываем 2 разных меню (формы), платформа показывает нам собственное исключение.
Ошибка
В Tiger.CEHost.exe возникло собственное исключение. Выберите «Выход», а затем перезапустите эту программу или выберите «Подробнее» для получения дополнительной информации.
Детали:
Error
ExceptionCode: 0xC0000005
ExceptionAdress: 0x00000001
Чтение: 0x00000001at WL.SetSTyle(IntPtr hwnThis, UInt32 dwMask, UInt32 dwStyle)
at Form._SetBorderStyle(AGL_WINDOWSTYLE wstyVal, AGL_WINDOWSTYLE wstyMask)
at Form.set_FormBorderStyle(значение FormBorderStyle)
at pDropDown.PopupForm.ShowForm.ShowForm.
в pDropDown.Show()
в pButton.ShowHideDropDown()
в pButton.OnClick(EventArgs e)
в Control.WnProc(WM wm, Int32 wParam, Int32 lParam)
в Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
в EVL.EnterMainLoop(IntPtr hwnMain)
в Application.Run(Form fm)
в Program.Main(String[] args)
Кажется, всегда происходит сбой в свойстве FormBorderStyle. Мы уже пытались удалить все pInvokes, так как, возможно, часть памяти была перезаписана, но это не помогло.
Мы также регистрируем каждый вызов метода Show, и каждый вызов выполняется в потоке графического интерфейса пользователя, а форма содержит допустимый дескриптор.