Frage

Ich verarbeite große Dateien, nachdem sie vom Benutzer ausgewählt wurden. Mein Code sieht aus wie folgt:

if (FileDialog.ShowDialog() == true) { 
    // process really big file
}

Dies friert die Benutzeroberfläche ein, sodass ich zuerst versucht habe, eine Ladenachricht anzuzeigen, bevor ein Benutzer die Datei ausgewählt hat, um ihnen einen visuellen Hinweis zu geben, dass etwas passiert:

loadingMessage.Visibility = Visibility.Visible;
if (FileDialog.ShowDialog() == true) { 
    // process really big file
}

Leider friert dies die Benutzeroberfläche immer noch vollständig ein, während die Datei verarbeitet wird.

Was ich perfekt gefunden habe, ist, wenn ich direkt nach der Dateiauswahl eine MessageBox feuere. Ich denke, es macht einen "Doevents" -Typ unter der Haube, um in der Laufzeit Flush -Event/UI -Artikel zu erhalten.

loadingMessage.Visibility = Visibility.Visible;
if (FileDialog.ShowDialog() == true) {
    MessageBox.Show("Sync!");
    // process really big file
}

In solchen Fällen wird die große Datei immer noch so langsam verarbeitet, aber die Ladenachricht wird angezeigt und die Benutzeroberfläche wird synchronisiert (ich mache einige andere Dinge in der realen Sache, wie zum Beispiel einen Wartecursor anzeigen).

Frage:

Silverlight hat keine Doevents -Funktionalität. Gibt es einen Anruf, den ich neben MessageBox tätigen kann.

War es hilfreich?

Lösung

Verwenden Sie einen Hintergrundarbeiter, um die schwere Berechnung im Hintergrund auszuführen. Wenn Sie über die Benutzeroberfläche informieren möchten, dass die Operation abgeschlossen ist, kann das Runworker -Ereignis der oben genannten Klasse verwendet werden. Die Alternative dazu besteht darin, einen vollständig separaten Thread und dann einen Rückruf zum UI -Thread mit Dispatcher.BeginInvoke () zu verwenden. Denken Sie daran, dass Sie mit .NET in einem separaten Thread ohne diese Art der Synchronisation keine GUI -Komponenten zugreifen können.

Andere Tipps

Verwenden Sie die Hintergrundworker -Klasse, um Ihre wirklich große Datei in einem Hintergrund -Thread zu verarbeiten? Hier ein Link für Sie: Wie man: Verwenden Sie einen Hintergrundarbeiter

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top