Hallo,
ich habe eine Dll, die WPF-Dialoge enthält (gekapselt):
Beispiel:
public void ShowError(Exception exception)
{
new WpfWindow(exception.Message).ShowDialog();
}
In meine Forms-Applikation binde ich die Dll ein und kann über ShowError(exc) auch das Fenster öffnen.
Aber:
Wen z.B. beim Start der Forms-Applikation die Methode aufgerufen wird bekomme ich manchmal folgende Exception:
Fehlermeldung:
Zeilennummer "12" und Zeilenposition "6" von "Beim Festlegen der Eigenschaft "System.Windows.FrameworkElement.Width" wurde eine Ausnahme ausgelöst.".
<Window x:Class="Tools.ErrorWindow"
x:ClassModifier="internal"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:p="clr-namespace:Tools"
mc:Ignorable="d"
Title="" SizeToContent="WidthAndHeight" WindowStyle="SingleBorderWindow"
ResizeMode="NoResize" ShowInTaskbar="False" Icon="Resources/BlancIcon.ico" Loaded="Window_Loaded">
<StackPanel Width="550">
…
Wenn die Applikation läuft, lässt sich das WPF-Fenster problemlos öffnen.
Kann mir jemand sagen, was ich falsch mache?
viele Grüße
Thorran
Was sagt Dir die InnerException Deiner Exception? Da wird ne Info drin stehen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
InnerException:
Fehlermeldung:
In der Arithmetischen Operation ist ein Über- oder Unterlauf aufgetreten.
Ich möchte Dir eigentlich nicht alles aus der Nase ziehen; daher ein weiterer Tipp zur Selbsthilfe:
Was sagt Dir diese Exception? Hast Du danach gegoogelt, wann diese Exception auftreten kann?
Tipp: die englische Fehlermeldung lautet> Fehlermeldung:
Overflow or underflow in the arithmetic operation.
Deine Google Recherchen sollten Dir eigentlich ein Hinweis geben, dass dies an einer Grid-/Layout-Auflösung liegen könnte; weil die Werte sehr klein oder sehr groß sind.
Mehr sieht man hier als Helfer auch nicht.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ok, Danke!
...ich verstehe, dass der Wert 500 zu klein oder (sehr wahrscheinlich zu groß) ist.
Aber warum?
Wenn ich das Fenster im laufenden Betrieb öffne, wird alles Prima dargestellt.
Wenn ich das Fenster beim Start der Applikation anzeigen will bekomme ich teilweise diese Fehlermeldung.
Folgende Lösung habe ich gefunden:
[DllImport( "msvcr70.dll", CallingConvention = CallingConvention.Cdecl )]
public static extern int _fpreset();
// Konstruktor
public SomeView()
{
// Reset the Floating Point (When called from External Application there was an Overflow exception)
_fpreset();
// Initialize the Component
InitializeComponent();
}
Mal ganz ehrlich, das sieht schon sehr Abenteuerlich aus!
Gibt es da keine schöne Lösung für das Problem?
Mal ganz ehrlich, das sieht schon sehr Abenteuerlich aus!
Genauso wie etwas durchaus auch als "Abenteuerlich" bezeichnet werden kann, was Du da insgesamt machst - daher passt das doch =) 😉
...ich verstehe, dass der Wert 500 zu klein oder (sehr wahrscheinlich zu groß) ist.
Aber warum?
Als ich damals über das Problem gestoßen bin, bin ich der Meinung, dass die entsprechenden Treffer in Google gesagt haben, dass das daran liegt, dass der Wert zu dem Zeitpunkt eben NICHT der gewünschte Wert von (in Deinem Fall) 500 ist; sondern zu diesem Zeitpunkt noch ein ungültiger Wert (zB -1?) ist.
Aber bin mir sicher, dass das in einen der ersten Treffer steht. Kannst es hier ja quoten, wenn Du es findest 👍
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code