使用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似乎有一个设计缺陷,几乎不可能调试这些异常?
答案 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
调用将其设置回预期模式。