Laden...

Lokale Methode in SplashScreen aufrufen

Letzter Beitrag vor 2 Jahren 3 Posts 693 Views
Lokale Methode in SplashScreen aufrufen

Hallo Zusammen,

ich komme leider mit meinem Projekt nicht weiter.

Wenn mein Programm läuft und ein Ereignis auftritt werden bestimmte Json-Dateien (List<MyAktion> myAktion = new List<MyAktion>) gelesen und in DataGrid als liste dargestellt.
Das Problem ist jetzt, das sehr viele Json-Dateien gelesen werden. Was natürlich etwas dauert.
Ich habe mir überlegt, wenn dieser Event auftritt soll so eine Art SplashScreen auftauchen und den Nutzer melden dass es mit dieser Aktion beschäftigt ist.

Dazu habe ich in www dies gefunden: https://www.codeproject.com/Articles/116875/WPF-Loading-Splash-Screen

Ich bin leider nicht so Tief in der Materie der Delegaten so drin.

Konkrete frage: Wie kann ich die lokale Methode (mit der Liste welche nur in Main-Classe verfügbar ist) von einer anderen Klasse (Splash) aufrufen?
(Eigentlich will ich anstelle

 Thread.Sleep(2000); 

mein Methoden ausführen.

Meine Lokale Methode:


 public void ReadLzkFromJsonXX()
        {
            _ = Dispatcher.BeginInvoke((Action)(() =>
            {
                DirectoryInfo d = new DirectoryInfo( FullProjectName); 
                if (!Directory.Exists( FullProjectName))
                {
                    Directory.CreateDirectory(FullProjectName);
                }
                FileInfo[] Files = d.GetFiles("*.json"); 
                                                       
                foreach (FileInfo file in Files)
                {
                    MyAktion ff = Json.ReadLzk(file.FullName);
                    myAktion.Add(ff);
                }
                myAktion = new List<MyAktion>(myAktion.OrderBy(i => i.Datum)); //sortiere die Liste nach id
                DgLZK.ItemsSource = myAktion ;
                DgLZK.Items.Refresh();
            }));
        }

Grüße und Dank im Voraus
CD77

Die Antwort auf deine Frage

Konkrete frage: Wie kann ich die lokale Methode (mit der Liste welche nur in Main-Classe verfügbar ist) von einer anderen Klasse (Splash) aufrufen?

ist, indem du entweder eine Statische Methode in der anderen Klasse erzeugst und diese aufrufst, oder in deinem Splashscreen eine Instanz der anderen Klasse erzeugst.
Das löst allerdings dein Problem - wenn, dann nur temporär - nicht.
Was du eigentlich möchtest ist eine saubere [Artikel] Drei-Schichten-Architektur und eine Initialisierung der Datenschicht.

Das Problem ist schon, dass Du nicht mit WPF umgehst, wie man mit WPF umgehen sollte.
[Artikel] MVVM und DataBinding
Machst Du das nicht wirst Du am Ende mehr Workarounds in Deiner App haben, als alles andere. WPF erfordert konsequentes Nutzen von MVVM.
Dann brauchst auch den Dispatcher Murks nicht mehr.

Im Endeffekt bedeutet das auf Deinen Fall, dass Du einen SplashScreen nur mit Workarounds umsetzen kannst, weil bei Dir die Basis schon nicht stimmt.