Mi aplicación de prueba WPF (muy simple, solo una ventana) está utilizando una dll administrada por un tercero (digamos X.dll). Este dll administrado usa algunos dll no administrados. Digamos que escribo una pequeña aplicación wpf que solo hace referencia a X.dll. Y en el constructor de la ventana accedo a algo dentro de X.dll (es decir, en algún espacio de nombres en X.dll). Al hacer esto, no veo ninguna excepción y parece que las cosas continúan como se esperaba. Pero al regresar el control de tiempo de ejecución de .NET, consigo una excepción en 'DispatcherUnhandledException' manejador de clase de aplicación: “desbordamiento positivo o negativo en la operación aritmética”"Desbordamiento o subdesbordamiento en la operación aritmética" Problema específico de WPF
System.ArithmeticException fue controlada mensaje = "desbordamiento o underflow en la operación aritmética ".
Fuente = "PresentationFramework"
StackTrace:
System.Windows.Window.ValidateTopLeft(Double length)
System.Windows.Window.CoerceTop(DependencyObject d, Object value) System.Windows.DependencyObject.ProcessCoerceValue(DependencyProperty dp, PropertyMetadata metadata, EntryIndex& entryIndex, Int32& targetIndex, EffectiveValueEntry& newEntry, EffectiveValueEntry& oldEntry, Object& oldValue, Object baseValue, CoerceValueCallback coerceValueCallback, Boolean coerceWithDeferredReference, Boolean skipBaseValueChecks)
System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, OperationType operationType)
System.Windows.DependencyObject.CoerceValue(DependencyProperty dp) at System.Windows.Window.SetupInitialState(Double requestedTop, Double requestedLeft, Double requestedWidth, Double requestedHeight)
System.Windows.Window.CreateSourceWindowImpl() at System.Windows.Window.SafeCreateWindow() at System.Windows.Window.ShowHelper(Object booleanBox)
System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
Algunos puntos:
- Esto sólo ocurre en WPF aplicación y no en winforms aplicación.
- Esto no queda atrapado en un try-catch. solo en Application DispatcherUnhandledException
- Esto no ocurre si accedo al código de X.dll dentro del evento 'Cargado' de la ventana, solo ocurre en el constructor.
¿Alguien puede adivinar el problema?
Gracias, Mishal
Cuando dice "acceder", quiere decir que está pasando el valor como argumento para algo, ¿no? ¿A qué lo estás pasando? – Jay
Si accedo/leo el entero XNameSpace.AStaticClass.StatInt (donde XNamespace es un espacio de nombres dentro de X.dll) y lo almaceno en otro entero, veo esto. Además, veo que si pongo la declaración en try catch entonces no queda atrapada. Solo queda atrapado en el controlador DispatcherUnhandledException de System.Window.Application ... eso es realmente extraño. – mishal153