none
ProgressBar aus methode heraus aktualisieren RRS feed

  • Frage

  • Hey Leute,

    hier meine nächste Frage

    ich möchte gerne eine progressBar erstellen und diese aus einer Methode heraus aktualisieren,

    also so ähnlich:

    XAML

    <StackPanel Orientation="Horizontal">
                        <Button x:Name="bReadXML" Content="Lese XML" Click="bReadXML_click"/>
                        <Button x:Name="bCreateDB" Margin="20 0 0 0" Content="Erstelle DB" Click="bCreateDB_click"/>
                        <ProgressBar x:Name="pgBar" Value="{Binding val}" Margin="10" Maximum="2000" Height="10" IsIndeterminate="False"/>
    </StackPanel>

    Page

    namespace Bible
        {
        
    
        public sealed partial class Optionen :  Page, IFileOpenPickerContinuable
            {
            
            public Optionen()
                {
    
                this.DataContext = this;
                this.InitializeComponent();
                           
                }
    
    
            private void bReadXML_click(object sender, RoutedEventArgs e)
                {
                var readXML xml = new readXML();
                xml.getFile();
    
                }

    Die Progressbar soll von der xml.getFile() Methode aktualisiert werden...

    Jemand einen Tipp?

    Samstag, 21. Februar 2015 15:14

Antworten

  • Hi,
    solange xml.getFile arbeitet, wird die Progressbar nicht aktualisiert.

    Um die ProgressBar zu aktualisieren, muss xml.getFile in einem anderen thread laufen. Zusätzlich muss auch der Fortschritt kalkuliert werden, um zu unterschiedlichen Zeitpunkten auch einen prozentualen Fortschrittswert zu bekommen und threadsicher der Oberfläche mitzuteilen. Dazu kann der Dispatcher genutzt werden.

    --
    Peter

    • Als Antwort markiert PHep Montag, 23. Februar 2015 02:23
    Samstag, 21. Februar 2015 15:20

Alle Antworten

  • Hi,
    solange xml.getFile arbeitet, wird die Progressbar nicht aktualisiert.

    Um die ProgressBar zu aktualisieren, muss xml.getFile in einem anderen thread laufen. Zusätzlich muss auch der Fortschritt kalkuliert werden, um zu unterschiedlichen Zeitpunkten auch einen prozentualen Fortschrittswert zu bekommen und threadsicher der Oberfläche mitzuteilen. Dazu kann der Dispatcher genutzt werden.

    --
    Peter

    • Als Antwort markiert PHep Montag, 23. Februar 2015 02:23
    Samstag, 21. Februar 2015 15:20
  • Entweder du machst das vorhergenannte und realisierst das z.B. mit einem Background-Worker oder du setzt einfach die Animation des ProgressBar.

    Anmerkung: Es ist in c#/.NET unüblich Klassen mit einem kleinen Buchstaben zu benennen. 

    Das kannst du über diesem Code machen:

    this.myProgBar.IsIndeterminate = true;

    xml.getFile();

    //... = false; //Animation entfernen, wie oben gezeigt!


    © 2015 Thomas Roskop

    Germany // Deutschland

    Samstag, 21. Februar 2015 15:51