none
XamlParseException in WPF

    Frage

  • Hallo liebe Community,

    seit einigen Tagen hab ich das Problem, das beim Debuggen meiner Anwendung folgender Fehler auftritt: Eine nicht behandelte Ausnahme des Typs "System.Windows.Markup.XamlParseException" ist in PresentationFramework.dll aufgetreten.

    Zusätzliche Informationen: Zeilennummer "3" und Zeilenposition "9" von "Durch den Aufruf des Konstruktors für Typ "TcpChatServer.MainWindow", der den angegebenen Bindungseinschränkungen entspricht, wurde eine Ausnahme ausgelöst.".

    Ich hänge an dieser Ausnahme schon seit Tagen, und bin am verzweifeln. Im Kontruktor, der in der Ausnahme erwähnt wurde, hab ich nichts geändert. Es hat auch noch vorher alles funktioniert, aber seit einiger Zeit kommt immer diese Ausnahme wenn ich debugge. Ich kann auch weder einen Fehler im XAML-Code noch im C# Code entdecken...
    Der Konstruktor im Code:

            public MainWindow()
            {
                InitializeComponent();
                UsernameInterface UsernameForm = new     UsernameInterface();
                UsernameForm.ShowDialog();
                NameLabel.Content = "UserName: " + Library.NickName;
            }

    Die Klasse UsernameInterface ist die zweite Form, wo der User einen Namen angeben soll und wird durch ShowDialog() aufgerufen. Durch die Eingabe des Users wird die Eingabe als String in einer andere Klasse, nämlich Library, gespeichert und anschließend soll der Name in einem Label in der WPF Form angezeigt werden. Dies hat auch bis zu einer bestimmten Zeit geklappt, nun halt nichtmehr.

    Ich hab mal gehört man könnte die InnerException für diese Ausnahme aufrufen um detailliertere Informationen über die Ausnahme zu erhalten, aber wie soll man diese während der Laufzeit aufrufen? Habe auch schon versucht die Aktionen im Konstruktor im Try-Block unterzubringen, um dann die Ausnahme mit Catch abzufangen, aber beim Debuggen unterbricht es immer wieder und zeigt die XampParseException an.

    Außerdem hab ich was auffälliges in der Debugging Ausgabe gefunden:

    Einzelschritt: Nichtbenutzercode "TcpChatServer.App.InitializeComponent" wird übersprungen.

    Kann das etwas damit zu tun haben? Ich meine, jede Form benötigt ja die InitializeComponent() Methode, da fragte ich mich warum diese "übersprungen" wurde.

    Leider hab ich in einem anderen Projekt die selbe Zeile in der Ausgabe gefunden, dennoch funktionierte da alles perfekt.      

    Das hab ich auch noch in der Ausgabe gefunden: 
    Eine Ausnahme (erste Chance) des Typs "System.ArgumentNullException" ist in System.dll aufgetreten.

    Kann das auch was mit diesem Fehler zu tun haben? Ich wüsste nicht wo in der Form eine ArgumentNullException auftreten könnte, und das auch noch vor dem Erscheinen der Form.

    Edit: Ich habe in der Form nur 4 TextBox Elemente, 3 Buttons und 7 Labels und halt einen Grid.
    Ich habe dieses Projekt in Visual Studio 2012 erstellt und die Zielplattform ist auf Any Cpu gestellt.

    Hoffe auf hilfreiche Antworten.
    Danke im Vorraus.

    LG

       

    Donnerstag, 23. Mai 2013 16:54

Antworten

  • Moin, Moin SkyCaptain

    an dem Xaml deines MainWindow liegt es nicht der deklarative Teil funktioniert auf jeden Fall. Die Exception wird an einer anderen Stelle ausgelöst. Mir fällt da gerade etwas auf, der Fehler wird ja in Zeile 3 Ausgelöst, das ist an der Stelle "InitializeComponent"... hast du in den vergangenen Tage irgendwelche Namen, Bezeichner oder so geändert?

    Mache mal folgendes:

    Im Solution Explorer sollte es oben einen Button geben wo du dafür sorgen kannst dass alle Files angezeigt werden, dann schaue im "obj/debug" Folder, dort sollte u.a. der File , MainWindow.g.cs und MainWindow.i.cs enthalten sein. In dem File MainWindow.g.cs wird die InitializeComponent-Methode ausgeführt, hier musst du mal schauen, denn an der Stelle entsteht dein Problem.

    Der einfachste Weg ist, dass du den Code und Xaml aus MainWindow irgendwohin kopierst, das MainWindow komplett löschst und dann wein neues erstellst, den Code und Xaml wieder rein kopierst, dann sollte es wieder gehen.

    Gruß Carl

    Ach ja, gewöhnungsbedürftig ist, dass du eine WinForm-Instanz im Constructor erzeugst und die auch noch Modal aufrufst. Deine Anwendung sollte vollständig initialisiert sein, bevor du das tust. Und du solltest dafür Sorgen dass die WinForm durch ein WPF-Window abgelöst wird, WinForm hat meiner Meinung nach in WPF nichts zu suchen!! Also, wenn überhaupt, dann füge folgendes in deinen Constructor ein:

     SourceInitialized += delegate
                    {
                        Forms frm = new Forms();
                        frm.ShowDialog();
                    };

    oder überschriebe den OnSourceInitialized-Handler. Wird von WPF OnSourceInitialized aufgerufen, kannst du sicher sein, dass die WPF alle Initialisierungen abgeschlossen hat und alle Teile, insbesondere die die im Xaml deklariert sind, initialisiert sind.


    Carl-Christian Schaffert Bahnhofsweg 2 82008 Unterhaching mobile: 0152-33 72 79 49 email: carl-christian.schaffert@dotnet-dev-expert.de skype: carl.christian.schaffert



    Samstag, 25. Mai 2013 05:29
  • Hallo, ich hatte eben auch noch eine Idee, wie man den Fehler finden könnte.

    Setze mal an allen wichtigen Stellen einen BreakPoint und debugge. Wichtig sind Konstruktoren, Load-Events etc, Startup-Event!?, ...halt alles was beim starten ausgeführt werden müsste/könnte.

    Jetzt noch eine Exotische Idee. Erstelle dein Programm und führe es normal aus dem Explorer heraus aus. Wenn dann eine Meldung xyz funktioniert nciht mehr kommt, gehe ins Startmenü/Homescreen und suche nach "Zuverlässigkeitsverlauf". Dort stehen dann Fehlerdetails, warum das Programm abstürtzte. Vielleicht gibt es dort noch einen Hinweis.

    PS: Mein/Unser Angebot steht natürlich noch, auch mal über die Mappe drüber zu sehen. Natürlich nur wenn du das darfst/kannst/möchtest/willst.

    Im absoluten Nicht-Lösung-Findungs-Fall kannst du die Trial von VS Pro installieren. Dann kannst du auch leichter an die InnerException heran kommen.


    <Code:13/> - Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets
    Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
    Einen Konverter zwischen C# und VB.NET Code gibt es hier.

    • Als Antwort markiert SkyCaptain97 Samstag, 25. Mai 2013 15:33
    Samstag, 25. Mai 2013 09:20
  • Hallo, die Fehler können von so ziehmlich allem herkommen, was im Konstruktor aufgerufen wird/statt findet. Die InnerException findest du, wenn du auf "Details anzeigen..." klickst:

    Diesen Baum kannst du solange aufklappen, bis keine InnerException mehr angegeben wurde. Dort findest du dann auch in der Regel Datei- und Zeilenangaben zum Fehler.


    <Code:13/> - Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets
    Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
    Einen Konverter zwischen C# und VB.NET Code gibt es hier.

    • Als Antwort markiert SkyCaptain97 Donnerstag, 23. Mai 2013 21:10
    Donnerstag, 23. Mai 2013 17:59
  • Ok, den scheint es seit dem 2012er VS in den Expressversionen nicht mehr zu geben. Da fällt mir nurnoch ein alles in einen TryCatch block zu packen und im CatchBlock einen BreakPoint zu setzen. Dadruch kannst du dann die Excption genauer abrufen.

    Eine für mich eher unschöne, aber funktionierende Lösung.

    PS: Du kannst es unterstützen, das MS den Assistenten wieder einbaut:
    http://connect.microsoft.com/VisualStudio/feedback/details/762652/enable-exception-assistant-option-missing-from-vs2012-express-for-desktop


    <Code:13/> - Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets
    Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
    Einen Konverter zwischen C# und VB.NET Code gibt es hier.

    • Als Antwort markiert SkyCaptain97 Freitag, 24. Mai 2013 12:31
    Donnerstag, 23. Mai 2013 21:39
  • Hallo SkyCaptain...

    wie Koopakiller schon sagte können die Fehlerquellen sehr vielfältig sein, mir fällt auf, dass du im Constructor von MainWindow ein "UsernameInterface" versuchst zu instanziieren, ist das nun ein Interface oder was soll das sein? Die Fehlermeldung deutet darauf hin , dass sich hier keine funktionierende Instanz erzeugen lässt, der Fehler kann im Constructor von "UsernameInterface" sein... darüber Hinaus wäre es gut wenn du mal dein Xaml zu beiden (MainWindow und UsernameInterface) posten würdest damit man mal nachschauen kann was da alles geschehen soll... dann sollten wir hier auch wissen was "Library" bei dir sein soll??? Denn möglicherweise kommt der Fehler auch von dort... wer weiß, also wenn du keinen Code postest, dann wird dir hier niemand helfen können

    Gruß Carl


    Carl-Christian Schaffert Bahnhofsweg 2 82008 Unterhaching mobile: 0152-33 72 79 49 email: carl-christian.schaffert@dotnet-dev-expert.de skype: carl.christian.schaffert

    • Als Antwort markiert SkyCaptain97 Freitag, 24. Mai 2013 17:05
    Freitag, 24. Mai 2013 14:41
  • Hi,
    die Ursache solch einer Fehlermeldung kann sehr vielfältig sein. Beim Initialisieren bzw. Start einer WPF-Anwendung wird sehr viel parallel gemacht und Fehler werden dann an den unmöglichsten Stellen gemeldet. Wenn beispielsweise eine Ressource eingebunden wird, die im Konstruktor einen Fehler hat (beispielsweise fehlende Datei), dann wird der Fehler u.U. im Konstruktor des Hauptfensters angezeigt. Solch einen Fehler kann man am schnellsten suchen, indem man die Anwendung schrittweise ab- bzw. aufrüstet. Bei der Abrüstung sollte man mit allen implizit erzeugten Instanzen beginnen, üblicherweise mit den Ressourcen.
     
    --
    Peter Fleischer
    • Als Antwort markiert SkyCaptain97 Sonntag, 26. Mai 2013 11:47
    Samstag, 25. Mai 2013 16:23

Alle Antworten

  • Hallo, die Fehler können von so ziehmlich allem herkommen, was im Konstruktor aufgerufen wird/statt findet. Die InnerException findest du, wenn du auf "Details anzeigen..." klickst:

    Diesen Baum kannst du solange aufklappen, bis keine InnerException mehr angegeben wurde. Dort findest du dann auch in der Regel Datei- und Zeilenangaben zum Fehler.


    <Code:13/> - Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets
    Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
    Einen Konverter zwischen C# und VB.NET Code gibt es hier.

    • Als Antwort markiert SkyCaptain97 Donnerstag, 23. Mai 2013 21:10
    Donnerstag, 23. Mai 2013 17:59
  • Danke Koopakiller für deine schnelle Antwort.

    Aber kann es sein das die Schaltfläche "Details anzeigen..." nicht bei der Express Version enthalten ist? Weil bei mir sah das Exception Fenster etwas anders aus als bei dir, und die Schaltflächen unter Aktionen waren nicht vorhanden. 

    Wenn diese Schaltfläche nicht in der Express Version vorhanden ist, gäbe es noch eine andere Möglichkeit die InnerException abzurufen?

    Donnerstag, 23. Mai 2013 21:17
  • Ok, den scheint es seit dem 2012er VS in den Expressversionen nicht mehr zu geben. Da fällt mir nurnoch ein alles in einen TryCatch block zu packen und im CatchBlock einen BreakPoint zu setzen. Dadruch kannst du dann die Excption genauer abrufen.

    Eine für mich eher unschöne, aber funktionierende Lösung.

    PS: Du kannst es unterstützen, das MS den Assistenten wieder einbaut:
    http://connect.microsoft.com/VisualStudio/feedback/details/762652/enable-exception-assistant-option-missing-from-vs2012-express-for-desktop


    <Code:13/> - Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets
    Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
    Einen Konverter zwischen C# und VB.NET Code gibt es hier.

    • Als Antwort markiert SkyCaptain97 Freitag, 24. Mai 2013 12:31
    Donnerstag, 23. Mai 2013 21:39
  • Hallo,
    den gesamten Inhalt des Konstruktors in einen Try Catch Block zu packen hab ich auch schon mal versucht, aber egal was es kommt nichtmal zur Ausführung des Konstruktors... Als ich zB dein Beispiel in dem Bild rekonstruiert habe wurde weder die Exception in deinem Try Block, noch die im Catch Block aufgerufen. :(
    Selbst als ich den Konstruktor ganz entfernt habe wurde die XamlParseException ausgelöst!
    Es scheint als gäbe da es ein wirkliches Problem im XAML Code, nur weis ich nicht wirklich wie ich da mehr Informationen zu dem Fehler bekommen kann. Ich werde versuchen einige Steuerelemente aus der Form zu entfernen und hoffen das es dann wieder richtig funktioniert.

    PS: Danke für den Microsoft Connect Link, habe abgestimmt.

    Freitag, 24. Mai 2013 12:57
  • Hallo zusammen,

    habe ebenfalls abgestimmt.
    Sollte man den Thread nicht lieber ins WPF-Forum verschieben?

    Gruß
    Marcel

    Freitag, 24. Mai 2013 13:03
  • Mmh, wenn der gesammte Inhalt des Konstruktors im Try-Block liegt, dann sollte auch der Catch-Block bei einem Fehler aufgerufen werden. Da das ja anscheinend nicht der Fall ist, muss der Fehler wo anders liegen. Versuche mal mit F11 zeilenweise zu debuggen, da bekommst du vielleicht mehr Informationen zur Fehlermeldung.

    Weiterhin kannst du versuchen, das Startup-Event in der App.XAML zu abbonnieren und dort unbehandelte Ausnahmen abfangen:

            private void Application_Startup(object sender, StartupEventArgs e)
            {
                AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
            }
    
            void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            {
                //Fehler...
    //e.ExceptionObject enthält die ERxception }

    Meine letzte Idee ist, Alles im Konstruktor auszukommentieren und dann ggf. nochmal mit F11 zu debuggen. Dann nach und nach die Zeilen wieder zu entkommentieren.

    Vielleicht wurde auch irgend eine Datei ausvershen gelöscht, die das Programm aber zur Laufzeit lädt?

    Wenn das auch nicht hilft, kannst du mal die Projektmappe auf SkyDrive (o.ä.) hoch laden und uns hier den Link geben. Alternativ kannst du auch die Projektmappe an koopakiller@live.de senden, wenn die Projektmappe niemand anderes sehen soll. Dann suche ich den Fehler in deinem Code heraus.

    Ich habe übrigens auch dafür abgestimmt. Ich finde es sinnlos das MS das heraus genommen hat...

    @Marcel: Ich stimme dir zu, ich verschiebe den Thread.

    PS: Den Trick mit dem TryCatch-Block habe ich im VS 2012 Desktop Express ausprobiert, dort ging es wie du siehst.


    <Code:13/> - Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets
    Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
    Einen Konverter zwischen C# und VB.NET Code gibt es hier.

    Freitag, 24. Mai 2013 13:44
  • Hallo SkyCaptain...

    wie Koopakiller schon sagte können die Fehlerquellen sehr vielfältig sein, mir fällt auf, dass du im Constructor von MainWindow ein "UsernameInterface" versuchst zu instanziieren, ist das nun ein Interface oder was soll das sein? Die Fehlermeldung deutet darauf hin , dass sich hier keine funktionierende Instanz erzeugen lässt, der Fehler kann im Constructor von "UsernameInterface" sein... darüber Hinaus wäre es gut wenn du mal dein Xaml zu beiden (MainWindow und UsernameInterface) posten würdest damit man mal nachschauen kann was da alles geschehen soll... dann sollten wir hier auch wissen was "Library" bei dir sein soll??? Denn möglicherweise kommt der Fehler auch von dort... wer weiß, also wenn du keinen Code postest, dann wird dir hier niemand helfen können

    Gruß Carl


    Carl-Christian Schaffert Bahnhofsweg 2 82008 Unterhaching mobile: 0152-33 72 79 49 email: carl-christian.schaffert@dotnet-dev-expert.de skype: carl.christian.schaffert

    • Als Antwort markiert SkyCaptain97 Freitag, 24. Mai 2013 17:05
    Freitag, 24. Mai 2013 14:41
  • Hallo Koopakiller, 

    Erstmal Danke für deine vorgeschlagene Methode, das Startup Event zu abbonnieren werde ich so schnell wie möglich ausprobieren...

    @Carl-Christian Schaffert,

    Das UsernameInterface ist eine Klasse, um genauer zu sein eine Windows Forms Klasse. Sorry für den verwirrenden Namen....
    "Library" ist eine statische Klasse in der ein String gespeichert wird, den man in der "UsernameInterface" Form per TextBox eingibt, dieser wird von der MainWindow Form benötigt um ein Label zu ändern.
    Vorher funktionierte es, die 2.Form mittels ShowDialog() aufzurufen und auf die Eingabe zu warten, um sie dann als String in "Library" zu speichern. Ich werde mal den Xaml Code posten:

    <Window x:Name="Window" x:Class="TcpChatServer.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="My Chat Client" Height="475" Width="808" Foreground="{x:Null}" ResizeMode="NoResize">
        <Window.BorderBrush>
            <SolidColorBrush Color="{DynamicResource {x:Static SystemColors.DesktopColorKey}}"/>
        </Window.BorderBrush>
        <Window.Background>
            <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
                <GradientStop Color="{DynamicResource {x:Static SystemColors.ControlLightLightColorKey}}" Offset="1"/>
                <GradientStop Color="{DynamicResource {x:Static SystemColors.ActiveCaptionColorKey}}"/>
            </LinearGradientBrush>
        </Window.Background>
        <Grid HorizontalAlignment="Left" Height="441" VerticalAlignment="Top" Width="798">
            <TextBox x:Name="TextBox1" HorizontalAlignment="Left" Height="35" TextWrapping="Wrap" VerticalAlignment="Top" Width="225" Margin="240,60,0,0" FontSize="16" BorderBrush="Black" ToolTip="IP-Addresse des zu verbindenden Server" AllowDrop="False">
                <TextBox.Background>
                    <SolidColorBrush Color="White"/>
                </TextBox.Background>
            </TextBox>
            <Label Content="Gebe hier die IP des Servers ein:" HorizontalAlignment="Left" VerticalAlignment="Top" Width="320" Margin="240,25,0,0" Height="35" FontSize="16" FontStyle="Italic"/>
            <Button x:Name="Button1" Content="Hier klicken um zu verbinden!" HorizontalAlignment="Left" VerticalAlignment="Top" Width="320" Margin="240,100,0,0" Height="60" FontSize="18" FontWeight="Bold" Click="Button_Click_1">
                <Button.BorderBrush>
                    <SolidColorBrush Color="{DynamicResource {x:Static SystemColors.ActiveCaptionTextColorKey}}"/>
                </Button.BorderBrush>
                <Button.Background>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                        <GradientStop Color="Black"/>
                        <GradientStop Color="{DynamicResource {x:Static SystemColors.HighlightTextColorKey}}"/>
                        <GradientStop Color="{DynamicResource {x:Static SystemColors.WindowColorKey}}"/>
                        <GradientStop Color="{DynamicResource {x:Static SystemColors.ControlLightLightColorKey}}" Offset="1"/>
                        <GradientStop Color="{DynamicResource {x:Static SystemColors.AppWorkspaceColorKey}}"/>
                    </LinearGradientBrush>
                </Button.Background>
            </Button>
            <TextBox x:Name="TextBox2" HorizontalAlignment="Left" Height="35" TextWrapping="Wrap" VerticalAlignment="Top" Width="80" Margin="480,60,0,0" BorderBrush="#FF000102" FontSize="16"/>
            <Label Content="Port:" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="480,25,0,0" Height="30" Width="80" FontSize="16" FontStyle="Italic"/>
            <Label Content="Version 1.1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="25" FontSize="10" Margin="10,0,0,0"/>
            <Label Content="Status:" HorizontalAlignment="Left" VerticalAlignment="Top" RenderTransformOrigin="2.368,4.808" Margin="10,125,0,0" Width="60" Height="41" FontSize="16" FontWeight="Bold" ToolTip="Gibt den Status des Servers an" Background="{x:Null}" BorderBrush="#FF110101" FontStyle="Italic"/>
            <Label x:Name="Label4" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" RenderTransformOrigin="2.368,4.808" Margin="85,125,0,0" Width="130" Height="41" ToolTip="Gibt den Status des Servers an" Background="{x:Null}"/>
            <TextBox x:Name="TextBox3" HorizontalAlignment="Left" Height="180" TextWrapping="Wrap" VerticalAlignment="Top" Width="480" Margin="160,240,0,-244" FontSize="11" AcceptsReturn="True"/>
            <TextBox x:Name="TextBox4" HorizontalAlignment="Left" Height="30" TextWrapping="Wrap" VerticalAlignment="Top" Width="480" Margin="160,190,0,-44" FontSize="11" AllowDrop="False"/>
            <Button x:Name="Button2" Content="Senden" HorizontalAlignment="Left" VerticalAlignment="Top" Width="90" Margin="660,190,0,-44" Height="30" BorderBrush="#FF060000" ToolTip="Drücken um eingegebene Nachricht zu senden" IsEnabled="False" Click="Button2_Click" IsDefault="True">
                <Button.Background>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                        <GradientStop Color="{DynamicResource {x:Static SystemColors.GrayTextColorKey}}" Offset="0"/>
                        <GradientStop Color="{DynamicResource {x:Static SystemColors.GradientInactiveCaptionColorKey}}" Offset="1"/>
                    </LinearGradientBrush>
                </Button.Background>
            </Button>
            <Label Content="Server:" HorizontalAlignment="Left" VerticalAlignment="Top" RenderTransformOrigin="2.368,4.808" Margin="10,69,0,0" Width="70" Height="41" FontSize="16" ToolTip="Gibt den Status des Servers an" Background="{x:Null}" BorderBrush="#FF110101" FontStyle="Italic"/>
            <Label x:Name="Label5" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="85,73,0,0" Width="130" Height="37"/>
            <Label x:Name="NameLabel" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,190,0,-64" Height="50" Width="145" FontStyle="Italic" FontSize="11"/>
            <Button x:Name="Button2_Copy" Content="Vom Server trennen" HorizontalAlignment="Left" VerticalAlignment="Top" Width="115" Margin="660,240,0,-94" Height="30" BorderBrush="#FF060000" ToolTip="Drücken um eingegebene Nachricht zu senden" Click="Button2_Click" IsDefault="True">
                <Button.Background>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                        <GradientStop Color="{DynamicResource {x:Static SystemColors.GrayTextColorKey}}" Offset="0"/>
                        <GradientStop Color="{DynamicResource {x:Static SystemColors.GradientInactiveCaptionColorKey}}" Offset="1"/>
                    </LinearGradientBrush>
                </Button.Background>
            </Button>
        </Grid>
    </Window>

    Freitag, 24. Mai 2013 17:05
  • Hallo SkyCaptian

    Dein Xaml habe ich mal mit ner Modalen Windows.Form Instanz getestet, ich kann da nichts feststellen, irgendwo hast du wohl noch Code den wir nicht kennen. Mal völlig davon abgesehen, dass deine Vorgehensweise eh ziemlich gewöhnungsbedürftig ist. Also... ich konnte kein Problem feststellen.

    Gruß Carl


    Carl-Christian Schaffert Bahnhofsweg 2 82008 Unterhaching mobile: 0152-33 72 79 49 email: carl-christian.schaffert@dotnet-dev-expert.de skype: carl.christian.schaffert

    Freitag, 24. Mai 2013 17:57
  • Hallo Carl-Christian, 

    Naja das war der gesamte Xaml-Code von meiner MainWindow Form, ich könnte noch den ganzen C# Code posten, aber da es meiner Meinung nach beim Debuggen momentan nichtmal bis zur Ausführung des Konstruktors kommt (bzw. die Ausnahme wird trotz eines Try-Catch Blockes oder halt ganz ohne Konstruktor in der Form ausgelöst), denk ich, würde dies auch nicht viel weiterhelfen. Vielleicht hat KoopaKiller Recht, das versehentlich von mir eine Datei in dem Projekt geändert/gelöscht wurde. Ich versuche das Projekt teilweise in einem neuen Projekt Schritt für Schritt zu rekonstruieren, bzw. dann ein ganz neues Projekt mit dem selben C# Code aber neuem Xaml Code zu machen.

    PS: Was meinst du ist mit meiner Vorgehensweise gewöhnungsbedürftig? 

    Freitag, 24. Mai 2013 21:07
  • Moin, Moin SkyCaptain

    an dem Xaml deines MainWindow liegt es nicht der deklarative Teil funktioniert auf jeden Fall. Die Exception wird an einer anderen Stelle ausgelöst. Mir fällt da gerade etwas auf, der Fehler wird ja in Zeile 3 Ausgelöst, das ist an der Stelle "InitializeComponent"... hast du in den vergangenen Tage irgendwelche Namen, Bezeichner oder so geändert?

    Mache mal folgendes:

    Im Solution Explorer sollte es oben einen Button geben wo du dafür sorgen kannst dass alle Files angezeigt werden, dann schaue im "obj/debug" Folder, dort sollte u.a. der File , MainWindow.g.cs und MainWindow.i.cs enthalten sein. In dem File MainWindow.g.cs wird die InitializeComponent-Methode ausgeführt, hier musst du mal schauen, denn an der Stelle entsteht dein Problem.

    Der einfachste Weg ist, dass du den Code und Xaml aus MainWindow irgendwohin kopierst, das MainWindow komplett löschst und dann wein neues erstellst, den Code und Xaml wieder rein kopierst, dann sollte es wieder gehen.

    Gruß Carl

    Ach ja, gewöhnungsbedürftig ist, dass du eine WinForm-Instanz im Constructor erzeugst und die auch noch Modal aufrufst. Deine Anwendung sollte vollständig initialisiert sein, bevor du das tust. Und du solltest dafür Sorgen dass die WinForm durch ein WPF-Window abgelöst wird, WinForm hat meiner Meinung nach in WPF nichts zu suchen!! Also, wenn überhaupt, dann füge folgendes in deinen Constructor ein:

     SourceInitialized += delegate
                    {
                        Forms frm = new Forms();
                        frm.ShowDialog();
                    };

    oder überschriebe den OnSourceInitialized-Handler. Wird von WPF OnSourceInitialized aufgerufen, kannst du sicher sein, dass die WPF alle Initialisierungen abgeschlossen hat und alle Teile, insbesondere die die im Xaml deklariert sind, initialisiert sind.


    Carl-Christian Schaffert Bahnhofsweg 2 82008 Unterhaching mobile: 0152-33 72 79 49 email: carl-christian.schaffert@dotnet-dev-expert.de skype: carl.christian.schaffert



    Samstag, 25. Mai 2013 05:29
  • Hallo, ich hatte eben auch noch eine Idee, wie man den Fehler finden könnte.

    Setze mal an allen wichtigen Stellen einen BreakPoint und debugge. Wichtig sind Konstruktoren, Load-Events etc, Startup-Event!?, ...halt alles was beim starten ausgeführt werden müsste/könnte.

    Jetzt noch eine Exotische Idee. Erstelle dein Programm und führe es normal aus dem Explorer heraus aus. Wenn dann eine Meldung xyz funktioniert nciht mehr kommt, gehe ins Startmenü/Homescreen und suche nach "Zuverlässigkeitsverlauf". Dort stehen dann Fehlerdetails, warum das Programm abstürtzte. Vielleicht gibt es dort noch einen Hinweis.

    PS: Mein/Unser Angebot steht natürlich noch, auch mal über die Mappe drüber zu sehen. Natürlich nur wenn du das darfst/kannst/möchtest/willst.

    Im absoluten Nicht-Lösung-Findungs-Fall kannst du die Trial von VS Pro installieren. Dann kannst du auch leichter an die InnerException heran kommen.


    <Code:13/> - Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets
    Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
    Einen Konverter zwischen C# und VB.NET Code gibt es hier.

    • Als Antwort markiert SkyCaptain97 Samstag, 25. Mai 2013 15:33
    Samstag, 25. Mai 2013 09:20
  • Danke euch beiden!!

    Ich habe den gesamten Xaml und C# in ein neues Projekt in der selben Projektmappe gelegt und wie in KoopaKillers Antwort beschrieben, das Startup Ereigniss in der App.Xaml abonniert, sodass es mir eine Rückmeldung gibt, falls die Exception auftritt:

        public partial class App : Application
        {
            private void Application_Startup(object sender, StartupEventArgs e)
            {
                AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
            }
    
            void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            {
                MessageBox.Show("Ein Fehler: " + e.GetType() + "Ist aufgetreten " + e.ToString() + Environment.NewLine + e.ExceptionObject.ToString());
            }
        }


    Und siehe da, es hat geklappt! Es hat mir auf eine Stelle im Code gezeigt, als ich eine statische Variable benutzen wollte, sie aber mit null belegt war (deshalb wurde in der Ausgabe auch eine Systen.ArgumentNullException aufgerufen).

    @Carl-Christian Schaffert,
    Du hast Recht, es ist wirklich nicht sehr sinnvoll eine andere Form aufzurufen wenn die eigentliche Hauptform noch nicht richtig initalisiert ist.. auch danke hierfür! Ich werde dies zukünftig beachten.

    Samstag, 25. Mai 2013 15:40
  • Hi,
    die Ursache solch einer Fehlermeldung kann sehr vielfältig sein. Beim Initialisieren bzw. Start einer WPF-Anwendung wird sehr viel parallel gemacht und Fehler werden dann an den unmöglichsten Stellen gemeldet. Wenn beispielsweise eine Ressource eingebunden wird, die im Konstruktor einen Fehler hat (beispielsweise fehlende Datei), dann wird der Fehler u.U. im Konstruktor des Hauptfensters angezeigt. Solch einen Fehler kann man am schnellsten suchen, indem man die Anwendung schrittweise ab- bzw. aufrüstet. Bei der Abrüstung sollte man mit allen implizit erzeugten Instanzen beginnen, üblicherweise mit den Ressourcen.
     
    --
    Peter Fleischer
    • Als Antwort markiert SkyCaptain97 Sonntag, 26. Mai 2013 11:47
    Samstag, 25. Mai 2013 16:23
  • Hallo nochmal,

    ich habe eben durch zufall noch etwas dazu gefunden. Klicke in dem Fenster einfach auf Unterbrechen und im Lokal-Fenster (Debuggen > Fenster > Lokal (Alt + 4)) gibt es dann das Exception-Objekt ($Exception).

    Das ist, denke ich, für das nächste mal einfacher um den Fehler zu finden.


    <Code:13/> - Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets
    Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
    Einen Konverter zwischen C# und VB.NET Code gibt es hier.

    Samstag, 1. Juni 2013 09:49