none
Цикл обработки сообщений в WPF RRS feed

  • Вопрос

  • Как в WPF создать цикл обраотки сообщений?

    Есть форма с двумя элементами управления кнокой и полем редактирования. Вот код обработчика кнопки

    private void button_Click(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("start");
                for(int i=0;i<1000;i++)
                {
                    textBox.Text = Convert.ToString(i, 10);
                }
                MessageBox.Show("end");
            }

    При нажатии на кнопку запускается цикл и выводится счетчик в поле редактирования, как обрабатывать сообщения виндовс чтобы программа не висал. что то на подобие GetMessage/PeekMessage в MFC. типо этого.

    29 сентября 2015 г. 11:45

Ответы

  • Он уже создан и все обрабатывается автоматически. Проблема в том что вы заблокировали основоной поток который эти сообщения обрабатывает, поэтому то все и виснет.

    В общем случае вы никогда не должбы блокировать основоной поток, иначе обработка сообщений прекратится и программа престанет отвечать. 

    Любые операции которые занимают дольше некоторого предельного времени (например 50 мс) должны производиится на другом потоке.

    Таким образом при нажатии кнопки следует создать поток и делать что надо в нем. 

    Так как работа с UI из другого потока невозможна,то потребуется использовать Dispatcher.Invoke() для его обновления. 


    This posting is provided "AS IS" with no warranties, and confers no rights.

    29 сентября 2015 г. 15:45
    Модератор