Необходимо принудительно обновить ярлык WPF - PullRequest
1 голос
/ 21 мая 2011

Я делаю асинхронный вызов веб-службы.Поскольку это может занять несколько секунд, существует метка состояния, которая позволяет пользователю узнать, что происходит.Но даже если вызов асинхронный, первый вызов, кажется, блокируется на несколько секунд, а метка состояния занимает слишком много времени для обновления.В WinForms я мог заставить ярлык обновляться (используя Update (), я думаю), но не в WPF.Какие-нибудь супер простые способы заставить это работать?

Спасибо, Джерри

Ответы [ 3 ]

1 голос
/ 21 мая 2011

Вы можете переместить всю логику вызова в блок QueueWorkUserItem или BackgroundWorker.Таким образом, первая инициализация прокси не будет блокировать UIThread (до того, как включится асинхронный шаблон Begin / End).Предполагая, что вы используете привязку данных объекта, выставляющего свойство, привязанное к метке, реализованной INotifyPropertyChanged, все должно происходить автоматически.

0 голосов
/ 21 мая 2011

Нет способа заставить этикетку обновиться, которая действительно будет работать в вашем случае. Если пользовательский интерфейс заблокирован, он не будет обновляться. По сути, когда вы на самом деле дойдете до точки, где вы обновляете текст метки, он будет отображаться в WPF. Единственное возможное исключение, о котором я могу подумать, это если вы используете элемент управления не-WPF, но даже тогда он должен работать.

Мое предложение было бы обновить метку перед выполнением первого действия (даже до инициализации переменных, поскольку это может быть там, где на самом деле проблема). Вот пример псевдокода того, что я имею в виду (на случай, если мне неясно):

private void KickOffProcess()
{
   label1.Text = "Processing ...";  //This is where you need to move the label update code
   AsyncCall();
}
0 голосов
/ 21 мая 2011

Я бы (дико) предположил, что блокировка происходит из-за создания / инициализации классов прокси-сервера службы.Если это так, вы можете попытаться создать прокси-сервер раньше или вызвать свой асинхронный веб-сервис в другом потоке.

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

...