Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Поток зависает при попытке доступа к контролу / 7 сообщений из 7, страница 1 из 1
15.10.2010, 16:19
    #36901897
Semyglass
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поток зависает при попытке доступа к контролу
у меня одного контролы не обновляются в потоке?

код:
Код: plaintext
1.
2.
3.
4.
5.
        void button3_Click(object sender, RoutedEventArgs e)
        {
            BackgroundWorker bw = new BackgroundWorker();
            bw.DoWork += Play;
            bw.RunWorkerAsync();
        }
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
        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.
...
Рейтинг: 0 / 0
15.10.2010, 16:21
    #36901909
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поток зависает при попытке доступа к контролу
Semyglass,

если так делать ,то да - только у тебя.
подпишись на событие progresschanges вроде, и туда помести код обновления контрола.
а то тут cross thread excpetion словишь.
...
Рейтинг: 0 / 0
15.10.2010, 16:33
    #36901943
Semyglass
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поток зависает при попытке доступа к контролу
пробовал:
Код: plaintext
1.
2.
3.
        void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            SelectedInfo.Text = currentTurn.ToString();
        }
все-равно зависает.

кроме того, мне надо именно в потоке обновлять, неужели никаких альтернатив нету?
кстати, MessageBox.Show тоже подвешивает.
...
Рейтинг: 0 / 0
15.10.2010, 16:56
    #36902030
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поток зависает при попытке доступа к контролу
Semyglass,

а че ты жмешь код то? покажи весь. походу у тебя там есть ньансы.
...
Рейтинг: 0 / 0
15.10.2010, 17:00
    #36902044
Semyglass
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поток зависает при попытке доступа к контролу
никаких нюансов нету. я убрал только закомментированное. вот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
        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;
        }
...
Рейтинг: 0 / 0
15.10.2010, 17:18
    #36902095
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поток зависает при попытке доступа к контролу
Semyglass,

Set the WorkerReportsProgress property to true if you want the BackgroundWorker to support progress updates
...
Рейтинг: 0 / 0
15.10.2010, 17:47
    #36902171
Semyglass
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поток зависает при попытке доступа к контролу
Спасибо!
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Поток зависает при попытке доступа к контролу / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]