Meine WPF-Test-App (sehr einfach, nur ein Fenster) verwendet eine von Drittanbietern gemanagte DLL (etwa X.dll). Diese verwaltete DLL verwendet einige nicht verwaltete DLLs. Also sagen wir, ich schreibe eine kleine wpf-App, die nur auf X.dll verweist. Und im Konstruktor des Fensters greife ich auf etwas innerhalb von X.dll (dh in einigen Namespaces in X.dll). Wenn ich das tue, habe ich keine Ausnahme und es sieht so aus als würden die Dinge wie erwartet ablaufen. Aber nach dem Zurückgeben des Steuerelements an die .NET-Laufzeitumgebung erhalte ich eine Ausnahme im Handler 'DispatcherUnhandledException' der Anwendungsklasse:
"Überlauf oder Unterlauf in der arithmetischen Operation."
System.ArithmeticException wurde nicht behandelt
Nachricht ="Überlauf oder Unterlauf in der arithmetischen Operation."
Quelle ="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)
Einige Punkte:
Kann jemand das Problem erraten?
Danke, Mishal
Nach dem Link von @Mishhl ist das Update
%Vor%Es wird durch etwas in einer enthaltenen DLL verursacht, das den FP in einen Zustand zurücksetzt, der nicht mit WPF / C # / Microsoft DLLs kompatibel ist. Delphi / CPPB tut dies standardmäßig.
Also entweder im Fensterkonstruktor oder im App () - Konstruktor tun Sie einfach
%Vor%Sie müssen möglicherweise Folgendes ändern, um auf eine Version von msvcr ###. dll
zu verweisen %Vor%z.B.
%Vor%Wenn es helfen kann, hatte ich genau das gleiche Problem (wie hier und hier ). Ich bringe hier eine der möglichen Ursachen dafür.
Ich verwende einen ElementHost (c #, .net4.0, winform, VS2012) für ein großartiges WPF UserControl. Alles hat gut funktioniert . In meinem UserControl-Behind-Code verwendete ich eine Klasse, die von einer anderen DLL kam, um den Fortschritt bestimmter Aufgaben zu speichern. Zum Beispiel (es ist nah an der Realität):
%Vor%Ich wollte dann diese Klasse in meine WPF progressBar / textBox "stecken", um den Fortschritt zu melden. Wie auch immer (und das ist eine weitere Konversation), WPF muss INotifyPropertyChanged auf jede einzelne Eigenschaft angewendet haben, die Sie in WPF einfügen möchten (um die Steuerelemente in WPF automatisch zu aktualisieren). Das ist eines der hässlichsten Dinge, die ich je gesehen habe, aber es ist was es ist (Und ich weiß, ich muss etwas verpasst haben ..)
Wie auch immer, um WPF-Binding-Mechanismen zwischen meiner ProgressBar / textbox und meiner SI_MyProgressionHelper-Klasse zu erfüllen, habe ich die Klasse (was ich wiederholen möchte, ist in einer anderen DLL) dazu geändert:
%Vor%BAM! Der Fehler tritt bei jeder zufälligen Integer-Eigenschaft eines beliebigen XMLE-Elements (Höhe, Breite usw.) meines UserContrl auf (genau wie hier und in der anderen Referenz, die ich oben angegeben habe).
Die hier eingebrachte Lösung korrigiert mein Problem: In meiner Main () - Methode Program.cs:
%Vor%und dann in meinem UserControl.xaml.cs im Konstruktor:
%Vor%Außerdem, und das ist der Grund, warum ich diesen Kommentar geschrieben habe : Durch Entfernen des INotifyPropertyChanged in meiner Helper-Klasse (und anderen Dingen), verschwindet das Problem . (aber mein WPF ist traurig, weil mein Code für ihn zu kurz ist).
Ich hoffe, diese zusätzlichen Informationen können dazu beitragen, dass jemand das gleiche Problem hat.
Auch für meinen französischen Kollegen ist hier der französische Fehler aufgetreten:
Es ist eine unausweichliche Entwicklung der Kapazitäten, die sich positiv oder negativ auswirken l'opération arithmétique.