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
    }