c# - Form.FormBorderStyle native 异常访问冲突

标签 c# winforms compact-framework formborderstyle

在 WindowsCE 平台(自定义构建)上,我们的 C# gui 使用常规形式来显示“弹出菜单”。 我们将 FormBorderstyle 设置为 None 因为我们不希望表单控件可见。

一些客户在一段时间后报告“灰盒”。 在此处进行一些测试后,我们可以非常快速地重现该问题。当我们不断打开 2 个不同的菜单(表单)时,平台会向我们显示 native 异常。

Error
A native exception has occurred in Tiger.CEHost.exe. Select Quit and then restart this program, or select Details for more information.

详情:

Error
ExceptionCode: 0xC0000005
ExceptionAdress: 0x00000001
Reading: 0x00000001

at WL.SetSTyle(IntPtr hwnThis, UInt32 dwMask, UInt32 dwStyle)
at Form._SetBorderStyle(AGL_WINDOWSTYLE wstyVal, AGL_WINDOWSTYLE wstyMask)
at Form.set_FormBorderStyle(FormBorderStyle value)
at pDropDown.PopupForm.Show()
at pDropDown.Show()
at pButton.ShowHideDropDown()
at pButton.OnClick(EventArgs e)
at Control.WnProc(WM wm, Int32 wParam, Int32 lParam)
at Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
at EVL.EnterMainLoop(IntPtr hwnMain)
at Application.Run(Form fm)
at Program.Main(String[] args)

它似乎总是在 FormBorderStyle 属性上失败。我们已经尝试删除所有 pInvoke,因为可能某些内存已被覆盖,但这没有帮助。

我们还记录了对 Show 方法的每次调用,每次调用都是在 gui 线程中进行的,并且 Form 包含一个有效的句柄。

最佳答案

我从未见过这种情况,这让我倾向于认为它不太可能成为 CF 甚至您的应用程序中的问题。

您的设备是否有足够的内存来运行该应用程序?内存不足的情况应该会引发 OOM,但我已经看到它会做其他不太可预测的事情,所以它始终是首先要检查的事情。

如果内存不是问题,您确定这不是平台问题吗?请记住,由于操作系统的很大一部分是由 OEM 开发的,因此您不能排除操作系统存在问题的可能性。

我会尝试两件事:

  1. 同一个应用程序是否可以在其他一些硬件(甚至是模拟器)上正常运行而没有问题?如果它可以在其他硬件上运行,则严重暗示该平台是问题所在。

  2. 由于使用 C# 中的小型应用程序进行重现相当容易,因此我建议使用 C/C++ 构建一个执行相同功能项目的应用程序,以查看它是否运行或出现相同的问题。

关于c# - Form.FormBorderStyle native 异常访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4013890/

相关文章:

C# Microsoft.DirectX.AudioVideoPlayback.Video 引用?

c# - 如何打印电脑唤醒源?

c# - 仅当项目不重复时才将项目添加到 ListView

c# - 如何使用紧凑的框架创建多行 RadioButton

javascript - 重定向到在 angularjs 中不起作用的网页

c# - 在 Process 中调用 robocopy 的批处理脚本不会终止

c# - 将字节数组转换为 int32

c# - 如何为每种产品存储多种尺寸

compact-framework - OpenNETCF 和 Compact Framework 3.5 兼容性

.net - 如何在.NET CF中以编程方式打开/关闭蓝牙?