Ваш пример кода даже не скомпилируется ... сравните это:
Globals.pizzaCounter = searchService.GetCategoryCounter("pizza");
с этим:
public void GetCategoryCounter(string category)
Обратите внимание, что это пустой метод - так что вы не можетеприсвойте возвращаемое значение Globals.pizzaCounter
.
. Следует иметь в виду, что это происходит асинхронно.Как вы сказали: «Если я добавлю несколько команд Debug.WriteLine, я увижу, что обратный вызов выполняется ПОСЛЕ возвращения ответа, то есть: возвращение не ожидает завершения асинхронной операции».В этом весь смысл того, что он асинхронный.Вы не хотите блокировать ваш поток пользовательского интерфейса, ожидающий возврата службы.
Вместо этого вы должны передать код извлечения службы для обратного вызова, который будет выполнен, когда ваша служба вернет некоторые данные.Затем необходимо выполнить маршалинг обратно в поток пользовательского интерфейса через Dispatcher
, и , а затем может обновить текстовое поле.Ваш код уже выполняет некоторые из них, отправляя обратно в поток пользовательского интерфейса, а затем обновляя свойство, что вызовет событие PropertyChanged
, позволяя пользовательскому интерфейсу знать, что нужно повторно получить данные из свойства.Тем не менее, похоже, что есть только один счетчик, а вы пытаетесь получить две разные категории.Вероятно, вам следует отделить саму службу от «счетчика категорий» (или чего-либо другого), который знает о службе поиска, но также относится к одной категории.Тогда у вас будет два экземпляра этого (но только один поисковый сервис);каждое текстовое поле будет привязано к соответствующему экземпляру счетчика категории.