MVCをパターンとしてWCFバックエンドとともに使用するWPFアプリケーションを構築しています。 私のUIは常に応答しなければならず、一部のコントロールではデータの読み込みに最大10秒かかることがあります。WPF with MVC with WCF with async await pattern
ConfigurationsForInterface = new ObservableCollection<string>() { "Loading..." };
ConfigurationsForInterface = await GetConfigurationInterfaceXAsync();
方法正常に動作します:
コードがうまく機能してConfigurationsForInterfaceは、私のコントロールにバインドされた観察可能なタイプである私のviewmodelの内側にある後
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スレッドに何らかの形で結合していると、データがロードされるまで凍結するために私のUIを起こすように思えます。デバッグから、メソッド自体で待機していないことがわかります。私はちょうど同期私は本当の問題を正確に指摘@Rowbearへ
この方法の使い方を教えてください。 – Fabio
ちょうどいいヒント:グローバルコンテキストでWCFクライアントを使用しないでください。ちょうど、正しく接続されていない接続からのメモリリークを求めています。 –
ohまた、WCFクライアントはスレッドセーフではないので、同じクライアントで同時に複数の呼び出しを行うと、おそらくループが発生します。 –