Windows Phone 7.1 - SLIDER

0

Witam,

Ostatnio zacząłem się bawić w pisanie aplikacji pod Windows Phone.

Napotkałem problem, którego nie mogę rozwikłać. Otóż chodzi o to, że po wpisaniu jakiejś liczby od 0-100 w textbox i naciśnięciu buttona - chciałbym aby slider ładował się np co 0,2sec o +1.

Poniżej fragment kodu:

private void button2_Click(object sender, RoutedEventArgs e)
{
                int x = Convert.ToInt32(tbwartosc.Text);

                for (int i = 0; i < x; i++)
                {
                    slider1.Value = i;
                    Thread.Sleep(200);
                }
} 

Po wykonaniu tego, program po prostu przestaje działać na pewien czas (sleep) i dopiero po upływie czasu w zależności jaką cyfrę wpisałem slider wypełnia się od razu. Nie widzę tego stopniowo (czyli nie widzę żeby wypełniał się co 0,2sec +1).

Co trzeba zrobić, aby uzyskać taki efekt?

Pozdrawiam :)

1

Działa, działa tylko nie widzisz tego bo usypiasz główny wątek który obsługuje GUI aplikacji. Poczytaj o instancji StopWatch i odpalaniu zdarzenia co jakiś czas. Ogólnie twój problem obija się o wielowątkowość. Główny wątek obsługuje twój kod i GUI. Pisząc Thread.Sleep(200) usypiasz właśnie główny wątek.

1

Nawiązując do instancji Stopwatch z tego co wyczytałem na internetach przeznaczona jest do różnego rodzaju pomiarów i nie udało mi się uzyskać oczekiwanego efektu. Natomiast udało mi się to rozwiązać za pomocą klasy DispatcherTimer. Jednak intryguje mnie w jaki sposób uzyskać identyczny efekt za pomocą klasy Stopwatch, jeżeli jest to możliwe. Pozdrawiam

 DispatcherTimer newTimer = new DispatcherTimer();

         int i = 0;
        
        public MainPage()
        {
          
            InitializeComponent();
            newTimer.Interval = TimeSpan.FromMilliseconds(1000);       
            newTimer.Tick += new EventHandler(newTimer_Tick);
            
        }

        private void newTimer_Tick(object sender, EventArgs e)
        {           
                i = i + 1;
                slider1.Value = i;
                if (slider1.Value == Convert.ToInt32(textBox1.Text))
                {
                    newTimer.Stop();
                }
        }

      
        private void button3_Click(object sender, RoutedEventArgs e)
        {  
            newTimer.Start();
          
        }
0

Przepraszam, źle ci napisałem. Ale widzę, że sam sobie poradziłeś

0

Nic nie szkodzi :) ale wolałem się upewnić. Pozdrawiam

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