Laden...

Beim Öffnen eines WPF-Fensters aus einer Forms-Applikation erscheint Exception

Erstellt von thorran vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.437 Views
T
thorran Themenstarter:in
31 Beiträge seit 2011
vor 4 Jahren
Beim Öffnen eines WPF-Fensters aus einer Forms-Applikation erscheint Exception

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

16.806 Beiträge seit 2008
vor 4 Jahren

Was sagt Dir die InnerException Deiner Exception? Da wird ne Info drin stehen.

T
thorran Themenstarter:in
31 Beiträge seit 2011
vor 4 Jahren

InnerException:

Fehlermeldung:
In der Arithmetischen Operation ist ein Über- oder Unterlauf aufgetreten.

16.806 Beiträge seit 2008
vor 4 Jahren

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.

T
thorran Themenstarter:in
31 Beiträge seit 2011
vor 4 Jahren

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();
}

Link:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/a31f9c7a-0e15-4a09-a544-bec07f0f152c/systemarithmeticexception-overflow-or-underflow-in-the-arithmetic-operation?forum=wpf

Mal ganz ehrlich, das sieht schon sehr Abenteuerlich aus!

Gibt es da keine schöne Lösung für das Problem?

16.806 Beiträge seit 2008
vor 4 Jahren

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 👍