2011-01-06 3 views
2

Iam new для MVVM и WPF. MY WPF-приложение будет вызывать веб-службу каждые 2 минуты и отображать ответ в пользовательском интерфейсе. Предоставьте возможность вручную вызвать тот же веб-сервис, нажав кнопку в пользовательском интерфейсе. Мой тайм-аут веб-службы составляет 5000 мс. Мой Q, если веб-сервис занимает более 1000 мс. Как избежать обхода пользовательского интерфейса. Plz предлагает некоторые подсказки для реализацииИзбегайте подвешивания пользовательского интерфейса в приложении WPF

+0

Вы не можете просто увеличить время ожидания в веб-сервисе? –

+2

@ArsenMkrt - Я не хочу ждать 5 секунд, чтобы пользовательский интерфейс отвечал ... не говоря уже дольше. –

ответ

5

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

Ниже приведены несколько ссылок, чтобы вы собираетесь:

  1. Background Worker
  2. Multithreading in WPF
  3. Getting started with Multithreading & WPF
3

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

WPF Threads: Build More Responsive Apps with The Dispatcher

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

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

Threading (C# and Visual Basic)

1

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

0

Используйте рабочий стол «Background», и если вы хотите вернуть данные в пользовательский интерфейс, используйте диспетчер. Если используется .net 4.0, используйте Задачи.

Смежные вопросы