Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 Поток зависает при попытке доступа к контролу  [new]
Semyglass
Member

Откуда: Санкт-Петербург
Сообщений: 407
у меня одного контролы не обновляются в потоке?

код:
        void button3_Click(object sender, RoutedEventArgs e)
        {
            BackgroundWorker bw = new BackgroundWorker();
            bw.DoWork += Play;
            bw.RunWorkerAsync();
        }
        private void Play(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;

            while (currentTurn < 10)
            {
                if ((worker.CancellationPending == true))
                {
                    e.Cancel = true;
                    break;
                }
                else
                {
                    currentTurn++;
                    SelectedInfo.Text = currentTurn.ToString();//в этом месте виснет
                    System.Threading.Thread.Sleep(1000);
                }
            }
        }
SelectedInfo - это TextBlock.
15 окт 10, 16:19    [9615709]     Ответить | Цитировать Сообщить модератору
 Re: Поток зависает при попытке доступа к контролу  [new]
AlexeiK
Member

Откуда:
Сообщений: 2859
Semyglass,

если так делать ,то да - только у тебя.
подпишись на событие progresschanges вроде, и туда помести код обновления контрола.
а то тут cross thread excpetion словишь.
15 окт 10, 16:21    [9615734]     Ответить | Цитировать Сообщить модератору
 Re: Поток зависает при попытке доступа к контролу  [new]
Semyglass
Member

Откуда: Санкт-Петербург
Сообщений: 407
пробовал:
        void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            SelectedInfo.Text = currentTurn.ToString();
        }
все-равно зависает.

кроме того, мне надо именно в потоке обновлять, неужели никаких альтернатив нету?
кстати, MessageBox.Show тоже подвешивает.
15 окт 10, 16:33    [9615846]     Ответить | Цитировать Сообщить модератору
 Re: Поток зависает при попытке доступа к контролу  [new]
AlexeiK
Member

Откуда:
Сообщений: 2859
Semyglass,

а че ты жмешь код то? покажи весь. походу у тебя там есть ньансы.
15 окт 10, 16:56    [9616044]     Ответить | Цитировать Сообщить модератору
 Re: Поток зависает при попытке доступа к контролу  [new]
Semyglass
Member

Откуда: Санкт-Петербург
Сообщений: 407
никаких нюансов нету. я убрал только закомментированное. вот код:
        void button3_Click(object sender, RoutedEventArgs e)
        {
            BackgroundWorker bw = new BackgroundWorker();
            bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
            bw.DoWork += Play;
            bw.RunWorkerAsync();
        }

        void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            SelectedInfo.Text = e.ProgressPercentage.ToString();
        }

        private void Play(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;

            while (true)
            {
                if ((worker.CancellationPending == true))
                {
                    e.Cancel = true;
                    break;
                }
                else
                {
                    currentTurn++;
                    MoveFovard = true;
                    worker.ReportProgress(currentTurn);
                    //ParseTurn(turns[currentTurn]);
                    //DrawSlider(currentTurn);
                    System.Threading.Thread.Sleep(1000);
                }

            }
            bPlay = false;
        }
15 окт 10, 17:00    [9616073]     Ответить | Цитировать Сообщить модератору
 Re: Поток зависает при попытке доступа к контролу  [new]
AlexeiK
Member

Откуда:
Сообщений: 2859
Semyglass,

Set the WorkerReportsProgress property to true if you want the BackgroundWorker to support progress updates
15 окт 10, 17:18    [9616211]     Ответить | Цитировать Сообщить модератору
 Re: Поток зависает при попытке доступа к контролу  [new]
Semyglass
Member

Откуда: Санкт-Петербург
Сообщений: 407
Спасибо!
15 окт 10, 17:47    [9616458]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить