Пример однопотокового приложения с длительным выполнением вычислений
Обновлен: Ноябрь 2007
В этом примере демонстрируются способы предотвращения перехода Пользовательский интерфейс в состояние "не отвечает" в однопотоковом приложении, выполняющем длинную операцию.
В этом примере имеется кнопка Button, при нажатии на которую начинается расчет простых чисел. Теоретически этот расчет является бесконечным, поэтому если обработчик событий перейдет в цикл и начнет расчет простых чисел, вызов никогда не вернется, и поток Пользовательский интерфейс перейдет в "спящее" состояние.
Чтобы избежать этого, в примере асинхронное задание ставится в очередь в диспетчере Dispatcher потока Пользовательский интерфейс путем вызова метода BeginInvoke. Задание, помещенное в очередь, обрабатывает одно число, когда поток Пользовательский интерфейс находится в состоянии SystemIdle, и помещает другой вызов в диспетчер для обработки следующего числа, когда поток Пользовательский интерфейс в очередной раз перейдет в состояние простоя.
Это гарантирует, что поток Пользовательский интерфейс будет всегда иметь приоритет над расчетом очередного числа, и Пользовательский интерфейс не прекратит работу.
Обсуждение этого примера см. в разделе Модель потоков.
В этом примере демонстрируется конкретная функциональная возможность Windows Presentation Foundation, и поэтому рекомендации по разработке приложений не соблюдаются. Более полное рассмотрение Windows Presentation Foundation (WPF) и рекомендации по тактике разработки приложений Microsoft .NET Framework см. в следующих разделах:
Специальные возможности: Рекомендации по специальным возможностям
Локализация: Общие сведения о глобализации и локализации WPF
Производительность: Улучшение производительности приложений WPF
Безопасность: Безопасность Windows Presentation Foundation
Построение примера
Установите пакет средств разработки программного обеспечения для Windows и откройте окно командной строки среды его построения. В меню "Пуск" выделите пункты "Все программы", "Пакет SDK для Microsoft Windows", а затем "Оболочки CMD".
Загрузите образец, как правило из документации пакета SDK, на жесткий диск.
Чтобы построить образец из окна командной строки среды построения, перейдите в исходный каталог образца. В командной строке введите MSBUILD.
Чтобы построить образец в Microsoft Visual Studio, загрузите решение образца или файл проекта и нажмите сочетание клавиш CTRL + SHIFT + B.
Выполнение примера
Для запуска скомпилированного образца в окне командной строки среды построения, выполните EXE-файл в папке Bin\Debug или Bin\Release, содержащихся в папке кода источника образца.
Для запуска скомпилированного образца с помощью отладки в Visual Studio, нажмите клавишу F5.
См. также
Задачи
Пример имитации службы погоды с помощью диспетчера
Пример многопоточного веб-обозревателя
Пример Disable Command Source Via System Timer