Создание Windows-приложений на основе Visual C#


              

Обновление пользовательского интерфейса в Windows-приложениях


Обновление пользовательского интерфейса само по себе является задачей, которую нужно решать, используя приемы асинхронного программирования. Дело в том, что вид приложения может зависеть от внешних процессов — например, от соединения с удаленным сервером или базой данных. Рассмотрим общую схему обновления на простейшем примере добавления единственной кнопки в режиме запуска приложения.

Создайте новое Windows-приложение и назовите его TestMethodInvoker. Перетаскиваем на форму три кнопки (точное расположение их не важно) и свойству Name устанавливаем значения btnAddSync, btnAsync, btnAddAsyncMI (в соответствии со свойством Text на рис. 7.5).

Приложение TestMethodInvoker в режиме дизайна

Рис. 7.5.  Приложение TestMethodInvoker в режиме дизайна

В Windows-приложениях перед обновлением пользовательского интерфейса необходимо вернуть элемент управления в основной поток. Это делается с помощью делегата MethodInvoker, который не принимает и не возвращает параметров.

Чтобы инициализировать MethodInvoker-делегат, нужно создать метод, обновляющий пользовательский интерфейс:

// Метод, обновляющий пользовательский интерфейс private void UpdateUI() {} // Инициализация делегата MethodInvoker MethodInvoker methodinvoker = new MethodInvoker(UpdateUI);

Для запуска экземпляра methodinvoker делегата MethodInvoker асинхронно — вызываем метод BeginInvoke текущей формы:

// Асинхронный запуск this.BeginInvoke(methodinvoker);

Добавляем обработчиков кнопок:

Листинг 7.11.

(html, txt)

Запускаем приложение. При нажатии кнопки Sync кнопка появляется самым обычным способом — в ее обработчике просто вызывается метод UpdateUI. В обработчиках кнопок Async и Async with MI вызывается метод UpdateUI, только в первом случае элемент создается не в основном потоке, поэтому не происходит обновления пользовательского интерфейса, а во втором случае элемент возвращается в основной поток – и кнопка появляется на форме.

Использование делегата MethodInvoker необходимо только в Windows-приложениях.

На диске, прилагаемом к книге, вы найдете приложение TestMethodInvoker (Code\Glava7\ TestMethodInvoker).




Содержание  Назад  Вперед