2016-07-20 6 views
0

Ich habe den folgenden Code, der einen Dialog öffnet, um dem Benutzer anzuzeigen, dass die Anwendung in einem anderen Thread verarbeitet, der das Fenster dann schließt, sobald es das LoadCompletedEvent empfängt. Allerdings bekomme ich immer den folgenden Fehler und bin mir nicht sicher, worauf genau es sich bezieht.WPF System.Reflection.TargetParameterCountException Parameter count mishmatch

An unhandled exception of type 'System.Reflection.TargetParameterCountException' occurred in PresentationFramework.dll 

Additional information: Parameter count mismatch. 

So wird der Thread erstellt.

 Thread thread = new Thread(() => 
     { 
      MetroProgressWindow metroProgressWindow = new MetroProgressWindow(this); 
      metroProgressWindow.ShowDialog(); 
     }); 
     thread.SetApartmentState(ApartmentState.STA); 
     //thread.IsBackground = true; 
     thread.Name = "omega-thread"; 
     thread.Start(); 

     // create window, do loading, business logic, etc    

     // throw load completed event 
     LoadCompletedEvent(this, EventArgs.Empty); 
     Visibility = Visibility.Hidden;  // hide MainWindow 
     renderWindow.ShowDialog();   // show the RenderWindow as a modal dialog NOTE: this is thread blocking 

Und dann in dem anderen Fenster Code sieht so aus.

public partial class MetroProgressWindow : MetroWindow 
{ 
    public MetroProgressWindow(IOmegaWindow window) 
    { 
     InitializeComponent(); 
     window.LoadCompletedEvent += delegate 
     { 
      Dispatcher.BeginInvoke(DispatcherPriority.Normal, 
       new Action(() => { this.Close(); }), 
       null); 
     }; 
    } 
} 
+0

Ich nehme an, Sie verwenden MahApps? – lokusking

+0

Ich benutze MahApps. das neue Objekt [2] hat nicht funktioniert, aber beim weiteren Debuggen scheitert es an metroProgressWindow.ShowDialog(); das keine Argumente benötigt – jkratz55

+0

Die Tatsache, dass ShowDialog keine Argumente annimmt, ist völlig irrelevant: Es aktiviert die Logik des Fensters, wo das Problem ist, dass Action keine Parameter erwartet. –

Antwort

0

Ich denke, dass das Problem durch die null Parameter in den BeginInvoke verursacht wird. Versuchen Sie zum Beispiel ohne es:

Dispatcher.BeginInvoke(DispatcherPriority.Normal, 
    new Action(() => { this.Close(); })); 
Verwandte Themen