von
Application.Current.Dispatcher.CheckAccess() bekomme ich ein true zurück. Das bedeutet also das ich mit dem
Application.Current.Dispatcher.Invoke gar nicht so verkehrt liege ?!
Lass es mich mal so erklären:
MainView <- Propertys in MainViewModel
View2 <- Propertys in MainViewModel
MainViewModel <- Propertys befüllen von Repository (asynchron)
Die Property ProposalDetailViewDataContext ist im MainViewModel und ist über das Binding gebunden an View3, welche in der MainView liegt.
View3 <- Propertys in ProposalDetailViewModel
ProposalDetailViewModel <- Propertys befüllen von Repository (asynchron)
Die als async gekennzeichnete Methode
GetData(Guid accesskey) beinhaltet den Task der vom Repository gestartet wird. Hier die beiden Methoden vom Repository.
methode
Open() öffnet die Verbindung zum Webservice und
Close() schließt diese wieder.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| private async Task<T> Get<T>(Func<Task<T>> actionTask) { try { Open(); return await actionTask(); } catch (Exception exception) { WriteClientException(exception); throw; } finally { Close(); } }
public async Task<string> GetSchemeOptionExtension(Guid accessKey) { var result = Get(() => _client.GetSchemeOptionExtensionAsync(accessKey)); await result;
return result.Result; } |
Ich wüsste nicht was ich hierbei falsch ist?!
-> Wohlgemerkt, in meinen anderen Views funktioniert der Aufruf vom Konstruktor nach
GetData(). Was aber nicht heißt das es nicht unsauber programmiert ist.
Mir geht es erstmal um das Deadlock Problem.
Ich entsuhldige mich jetzt erstmal dafür das ich hier unterschiedliche Methodennamen stehen habe. Dachte mir am Anfang die komplizierten und verwirrenden, innerhäuslichen Fachbegriffe erspare ich euch und verkürze sie einfach
Wie schon gesagt, dass mit dem Dispatcher war nur ein Test!!
Hier liegt aber auch das Problem. Sobald der Debugger die Zeile
Message = optionExtentsionText; durchlaufen hat, friert die Applikation ein.
Moderiert von Th69: C#-Tags hinzugefügt
Moderiert von Th69: B- durch C#-Tags ersetzt