Избегайте зависания пользовательского интерфейса в приложении WPF - PullRequest
2 голосов
/ 06 января 2011

Я новичок в MVVM и WPF. Приложение My WPF будет вызывать веб-сервис каждые 2 минуты и отображать ответ в пользовательском интерфейсе. Предоставьте возможность вручную вызвать тот же веб-сервис, нажав кнопку в пользовательском интерфейсе. Время ожидания моего веб-сервиса составляет 5000 мс. Мой вопрос: если веб-сервис займет более 1000 мс. Как избежать ханирования пользовательского интерфейса. Пожалуйста, предоставьте некоторые советы для реализации

Ответы [ 5 ]

5 голосов
/ 06 января 2011

Это было бы хорошим местом для реализации нескольких потоков, поскольку выполнение всего взаимодействия веб-приложения в одном потоке позволяет основному потоку пользовательского интерфейса реагировать на ввод пользователя.

Ниже приведены несколько ссылок, которые помогут вам:

  1. Фоновый рабочий
  2. Многопоточность в WPF
  3. Начало работы с многопоточностью и WPF
3 голосов
/ 06 января 2011

Как насчет использования Threading?MSDN имеет хорошую рецензию еще в 2007 году по основам:

Потоки WPF: создание более отзывчивых приложений с помощью Dispatcher

Убедитесь, что вы не толькообратите внимание на Dispatcher, а также на второй на BackgroundWorker.

Если вы совсем не знакомы с Threading (что может показаться так), то вам, вероятно, следует начать с простогоОсновы многопоточности из MSDN:

Потоки (C # и Visual Basic)

2 голосов
/ 06 января 2011

Вы можете использовать вызов асинхронной веб-службы для связи с веб-службой.

примеры:

http://patconroy.wordpress.com/2009/01/22/asynchronous-web-service-invocation/

http://www.codeguru.com/csharp/csharp/cs_webservices/security/article.php/c9179

http://ondotnet.com/pub/a/dotnet/2005/08/01/async_webservices.html

1 голос
/ 06 января 2011

По сути, вы не должны выполнять какую-либо работу в потоке пользовательского интерфейса, выполнение которой может занять некоторое время.В вашей модели представления вы должны иметь какую-либо форму объекта Command, которая привязана к кнопке вашего представления.Эта команда должна в другом потоке асинхронно вызывать ваш вызов веб-службы.Таким образом, пользовательский интерфейс никогда не будет зависать, ожидая возврата команды, потому что команда вернется очень быстро.Когда асинхронный вызов вернется, вы сможете обработать любой другой пользовательский интерфейс, который вам нужно сделать.

0 голосов
/ 07 января 2011

Используйте Background worker, а если вы хотите вернуть данные в пользовательский интерфейс, используйте Dispatcher.При использовании .net 4.0 используйте Задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...