设置属性' System.Windows.FrameworkElement.Height'抛出一个例外

时间:2014-10-28 20:43:05

标签: c# wpf

使用C#和WPF编码的内部应用程序可以在20个人之外无故障地工作,除了一个用户。通常(但不总是)显示的第一个窗口会导致我们的异常处理程序努力报告的异常:

Exception trace:
Set property 'System.Windows.FrameworkElement.Height' threw an exception.
Overflow or underflow in the arithmetic operation.

Stack trace:
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
   at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
   at System.Windows.Application.LoadBamlStreamWithSyncInfo(Stream stream, ParserContext pc)
   at System.Windows.Application.LoadComponent(Uri resourceLocator, Boolean bSkipJournaledProperties)
   at System.Windows.Application.DoStartup()
   at System.Windows.Application.<.ctor>b__1(Object unused)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)

XAML没有明显的问题,我永远不会直接触及任何元素的高度。我已经尝试将窗口默认设置为更大或更小的尺寸,但是没有解决任何问题。它实际上是一个简单的用户登录窗口。这个问题经常但不会总是在重新启动后消失。

我不希望这个问题出现问题,但我不清楚在调试中应该从哪里开始 - WPF似乎有一个设计缺陷,几乎不可能调试这些异常?

1 个答案:

答案 0 :(得分:4)

在阿巴斯建议再次搜索之后,这是我最终得到的解决方案:

/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
    [DllImport("msvcr71.dll", CallingConvention = CallingConvention.Cdecl)]
    private static extern int _controlfp(int n, int mask);

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        _controlfp(0x9001F, 0xFFFFF);

        // ... whatever else you want to do on application startup
        // e.g. add last-resort error handler via DispatcherUnhandledException
    }
}

某些软件显然可以将浮点计算模式置于意外状态。 _controlfp调用将其设置回预期模式。