none
ProgressBar einbetten RRS feed

  • Frage

  • Ich habe folgendes Anliegen:

    Ich möchte, dass wenn man einen Button drückt, welcher zu einer anderen Seite führt, eine ProgressBar erscheint, bis die neue Seite geladen und einsatzbereit ist.

    Sprich, ich drücke Knopf X, um auf Seite Y zu gelangen.

    Seite Y braucht eine undefinierte Zeit zum öffnen - solange soll die ProgressBar erscheinen.

    Als Antwort möchte ich keine Verlinkungen erhalten, nach dem Motto, guck hier.

    Ich will eine komplette Erklärung samt Beispielcode erhalten, um endlich meine App in den Marketplace zu bekommen.

    Ich danke im Voraus und mit freundlichen Grüßen

    Sonntag, 14. Juli 2013 14:01

Alle Antworten

  • Hallo, einen kompletten Code wirst du nicht bekommen. Ich werde hier nur die Grundzüge einer Möglichkeit aufzeigen. Zumal noch Infos fehlen wie welche Programmiersprache und welches System genau du nutzt (7.1, 8, ...)

    Du navigierst ersteinmal ganz normal zur 2. Seite.

    NavigationService.Navigate(new Uri("/Pages/Page2.xaml", UriKind.Relative));
    Auf dieser Seite zeigst du von Anfang an ein ProgressBar an. Den Eigentlichen Inhalt blendest du aus. Im Loaded-Event initiierst du einen 2. Thread (async/await/...). In diesem Lädst du dann die Seite und setzt evtl. den Fortschritt des ProgressBar's. Wenn die Hintergrundarbeit fertig ist, blendest du den ProgressBar aus und den eigentlichen Inhalt ein. Stichwort: Dispatcher.

    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Sonntag, 14. Juli 2013 14:22
  • System: Am liebsten mit Expression Blend oder Visual Studio 2010 Express

    Für: WP 7.8

    Anhand meines Systems ist recht leicht zu erkennen, dass ich kein studierter Informatiker, sondern blutiger Anfänger bin.

    Deshalb sind die Verlinkungen zu den englischsprachigen Seiten nett, für mich aber nicht hilfreich, denn sich selbst programmieren bei zu bringen via fremdsprachigen Seiten bekomme ich nicht hin.

    Warum: Da der Sachverhalt an sich für mich komplex ist und selbst in deutscher Sprache einiges abverlangt.

    Deshalb war der Hinweis dabei, keine Verlinkungen zu setzen, da diese in englischer Sprache verfasst sind.

    Deutschsprachige Foren bezüglich diesen Themas sind nach eigener Erfahrung knapp.

    Ich kenne kein Forum, welches meine noch offenen Punkte abdeckt, deshalb wende ich mich an dieses Forum, um eindeutige Antworten für meine Problemstellung zu erhalten.

    Sonntag, 14. Juli 2013 19:04
  • Hi,

    die Fragestellung finde ich leider auch ein wenig schwierig. "Erkläre mir wie ich Zylinderkolben funktioniert, ohne mir zu sagen, was ein Motor ist" ist aus meiner Sicht nicht der sinnvollste Ansatz.

    Die korrekte Antwort aus meine Erfahrungsschatz ist, dass du keine ProgressBar benötigst, da die Seite, wenn richtig entwickelt, direkt dargestellt wird, und die Daten / Verarbeitung nachgelagert passiert, während die Oberfläche bereits zu sehen ist. Das erreicht man durch asynchrone Aufrufe. Ich weiß, dass meine Antwort für dich wahrscheinlich weitaus weniger zufriedenstellend ist, als dir eine direkte Lösung für dein Problem zu bieten, aber anders weiß ich leider nicht, wie ich dir konstruktiv und sinnvoll helfen kann.

    Gruß, Peter


    This posting is provided "AS IS" with no warranties, and confers no rights.

    Montag, 15. Juli 2013 09:38
  • Folgender Code ist nur die zweite Seite und sollte die Lösung veranschaulichen:

    public partial class Page1 : PhoneApplicationPage
        {
            //Klassenweiter Zugriff
            ProgressIndicator prog;
            public Page1()
            {
                InitializeComponent();
                //ProgressIndicator erstellen
                prog = new ProgressIndicator();
                prog.IsVisible = true;
                prog.IsIndeterminate = true;
                prog.Text = "Lade...";
    
                SystemTray.SetProgressIndicator(this, prog);
            }
    
            protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
            {
                //Das "Laden" auslagen in einen Thread um die UI nicht zu blockieren
                ThreadPool.QueueUserWorkItem(func =>
                {
                    //"Laden"
                    for (int i = 0; i < 500; i++)
                        System.Threading.Thread.Sleep(50);
                    //Fertig, Progressbar wieder ausschalten, das muss aber im UI Thread passieren.
                    Deployment.Current.Dispatcher.BeginInvoke(() =>
                    {
                        prog.IsVisible = false;
                        SystemTray.SetProgressIndicator(this, prog);
                    });
                });
                
            }
        }


    http://patrickgetzmann.wordpress.com/

    Dienstag, 23. Juli 2013 15:16