Я создаю приложение WPF, которое использует MVVM как шаблон вместе с бэкэнд WCF. Мой пользовательский интерфейс должен всегда быть отзывчивым, а для некоторых элементов управления данные могут быть загружены до 10 секунд.WPF с использованием MVVM с WCF в шаблоне ожидания async
После кода работает хорошо и в моей ViewModel где ConfigurationsForInterface является Наблюдаемые типа, который связан с моим контролем:
ConfigurationsForInterface = new ObservableCollection<string>() { "Loading..." };
ConfigurationsForInterface = await GetConfigurationInterfaceXAsync();
Метод, который работает отлично:
public async Task<ObservableCollection<string>> GetConfigurationHL7Server5Async()
{
ObservableCollection<string> result;
using (var localClient = new ManagerListenerClient(Globals.ChannelBinding, Globals.EndpointAddress))
{
result = await localClient.GetConfigurationsAsync("interfacex");
}
return result;
}
Метод, который зависает мой UI, поскольку я повторно использую клиент службы, уже открытый в других областях приложения, поскольку я устанавливаю контекст для службы (пользователя):
public async Task<ObservableCollection<string>> GetConfigurationHL7Server5Async() { ObservableCollection<string> result; result = await Globals.Client.GetConfigurationsAsync("interfacex"); return result; }
Похоже, клиент WCF каким-то образом связан с моей UI потоке и вызывает у меня интерфейс заморозить до загрузки данных. Из моей отладки видно, что он не ждет в самом методе.
Может кто-то помочь мне, почему я не могу повторно использовать свой объект клиента WCF, который используется в другом месте и не всегда в контексте асинхронной как только синхронизировать называя ViewModel
Можете ли вы показать, как этот метод используется? – Fabio
Просто совет: никогда не используйте WCF-клиент в глобальном контексте. Его просто просят утечку памяти из соединений, которые не закрываются должным образом. –
oh, а также клиенты WCF не являются потокобезопасными, поэтому одновременное выполнение нескольких вызовов с одним и тем же клиентом, вероятно, вызовет вас для цикла –