Wątki i uaktualnienie UI w WPF

0

Witam.
Piszę sobie aplikację, w której muszę w pętli uaktualniać kontrolki z pewnym opóźnieniem. Dla ułatwienia podam przykład kodu:

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            Button[] btn = new Button[3];

            for (int i = 0; i < 3; i++)
            {
                btn[i] = new Button();
                btn[i].Width = 60;
                btn[i].Height = 60;
                Grid.SetColumn(btn[i], i);
                mainGrid.Children.Add(btn[i]);

                Thread.Sleep(500);
            }
        }

Kod ten dodaje nowe przyciski do Grida z danym opóźnieniem. Niestety UI się nie aktualizuje co dany obrót pętli. Wiem, że problemem jest tu wielowątkowość. Próbowałem już używać klasy BackgroundWorker, Dispatcher czy Thread ale niestety nie udało mi się osiągnąć oczekiwanego efektu. Proszę o pomoc.

0
 
        DispatcherTimer timer;
        int counter = 0;
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            if(timer == null)
                timer = new DispatcherTimer(TimeSpan.FromSeconds(0.5), DispatcherPriority.Normal, DispatcherTimerTickCallback, Dispatcher);
            timer.Start();
        }

        void DispatcherTimerTickCallback(object sender, EventArgs e)
        {
            if (counter > 3)
            {
                timer.Stop();
                counter = 0;
            }
            else
            {
                Button btn = new Button();
                btn.Width = 60;
                btn.Height = 60;
                Grid.SetColumn(btn, counter);
                mainGrid.Children.Add(btn);
                counter++;
            }
        }
0

Nie uzywaj tread.Sleep() do odliczania czasu bo raz ma dokładnośc 10-30 ms rózna dla każdego kompa wiec nic nie zmierzysz, a dwa służy on do symulowania długich obliczeń i w czasie "snu" nie spi tylko zużywa zasoby.

1 użytkowników online, w tym zalogowanych: 0, gości: 1