WPF SetParent 抛出 ArithmeticException
WPF SetParent throwing an ArithmeticException
我一直在用 C# 和 WPF 开发应用程序的插件。
在 Win7 机器上启动之前一直运行良好。症状是 Microsoft .NET Framwork 的 "Unhandled exception" 对话框在启动时弹出 System.ArithmeticException(算术运算中的溢出或下溢)并给出堆栈跟踪指向System.Windows.Controls.Primitives.Track.ComputeScrollBarLengths (...)
甚至更深。
所以,我开始调试应用程序:它显示在调用 user32.dll 的 setParent 时抛出 System.ArithmeticException。这是在应用程序调用显示附加组件时完成的 UI.
public bool ShowUI(int Parent)
{
userControl = new MyUserControl(); // Extends System.Windows.Forms.UserControl
SetParent(userControl.Handle, new IntPtr(Parent)); // <- exception thrown here
...
}
什么可能导致这个问题?
我在此处添加解决方案,以防有人发现它有用。
如 Hans Passant 的评论中所述,非托管代码中的某些内容(仅在 64 位版本中)导致浮点运算引发异常,从而导致此错误。解决方案类似于此答案:
在我的加载项初始化时添加 _fpreset()
函数调用解决了问题。
[DllImport("msvcr.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int _fpreset();
public static void Run()
{
// Other code
_fpreset(); // Reinitialises the floating-point package
}
我一直在用 C# 和 WPF 开发应用程序的插件。
在 Win7 机器上启动之前一直运行良好。症状是 Microsoft .NET Framwork 的 "Unhandled exception" 对话框在启动时弹出 System.ArithmeticException(算术运算中的溢出或下溢)并给出堆栈跟踪指向System.Windows.Controls.Primitives.Track.ComputeScrollBarLengths (...)
甚至更深。
所以,我开始调试应用程序:它显示在调用 user32.dll 的 setParent 时抛出 System.ArithmeticException。这是在应用程序调用显示附加组件时完成的 UI.
public bool ShowUI(int Parent)
{
userControl = new MyUserControl(); // Extends System.Windows.Forms.UserControl
SetParent(userControl.Handle, new IntPtr(Parent)); // <- exception thrown here
...
}
什么可能导致这个问题?
我在此处添加解决方案,以防有人发现它有用。
如 Hans Passant 的评论中所述,非托管代码中的某些内容(仅在 64 位版本中)导致浮点运算引发异常,从而导致此错误。解决方案类似于此答案:
在我的加载项初始化时添加 _fpreset()
函数调用解决了问题。
[DllImport("msvcr.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int _fpreset();
public static void Run()
{
// Other code
_fpreset(); // Reinitialises the floating-point package
}