동기 메서드에서 이벤트를 인스턴스화하는 ViewModel이 있습니다. 이 이벤트는 계속 진행하기 전에 UI에서 "예"또는 "아니요"대답이 필요하다는 신호를 UI에 전달합니다.MessageDialog - 사용자 입력 대기 필요
MessageDialog
을 표시하고 사용자가 대답을 제공 할 때까지 기다리려고합니다. 예 또는 아니오.이 작업을 수행하는 데 어려움이 있습니다. 나는 이것을 시도 할 때 현재 UnauthorizedAccessException
을 얻는다. 내가 시도
async Task<bool> Instance_SwitchConfirmation(string question)
{
MessageDialog md = new MessageDialog(question);
md.Commands.Add(new UICommand("Yes", CommandInvokedHandler));
md.Commands.Add(new UICommand("No", CommandInvokedHandler));
md.ShowAsync();
return this.canSwitch;
}
async void CommandInvokedHandler(IUICommand command)
{
this.canSwitch = command.Label == "Yes" ? true : false;
}
:
는 여기 UI의 코드를 살펴입니다
var uiContext = TaskScheduler.FromCurrentSynchronizationContext();
Task.Factory.StartNew(() => {
MessageDialog md = new MessageDialog(question);
md.Commands.Add(new UICommand("Yes", CommandInvokedHandler));
md.Commands.Add(new UICommand("No", CommandInvokedHandler));
md.ShowAsync();
},
new System.Threading.CancellationToken(),
TaskCreationOptions.PreferFairness, uiContext);
하지만이 같은 예외와 함께 실패합니다.
마지막으로 MessageDialog를 기다리는 것처럼 대화 상자가 표시되지 않고 UI 스레드가 잠 깁니다. MessageDialog
이 Show()
의 동기 버전을했다
MessageDialog md = new MessageDialog(question);
md.Commands.Add(new UICommand("Yes", CommandInvokedHandler));
md.Commands.Add(new UICommand("No", CommandInvokedHandler));
await md.ShowAsync();
하면 괜찮을 것입니다하지만 크로스 스레딩과 함께 내 synchrounous 일상과 함께 MessageDialog
의 asynchrnous behvaior은, 저를 혼동한다. 내 백엔드 ViewModel에서 동기 메서드를 계속하기 전에 누군가가 MessageDialog
에 사용자 입력을 기다릴 필요가 무엇인지를 설명 할 수 있는지 궁금합니다.
도움을 미리 감사드립니다.
응답 해 주셔서 감사합니다.하지만 코드 입력을 계속하기 전에 사용자 입력을 기다려야합니다. Dispather.RunAsync 호출을 기다리는 경우 MessageDialog가 표시되지 않고 UI 스레드가 잠 깁니다. 어떤 제안? 미리 감사드립니다. – user2334154
콜백이 원인 일 수 있습니다. 내 편집을 시도하십시오. – Romoku
빠른 응답을 보내 주셔서 다시 한 번 감사드립니다. 불행히도, 이것은 여전히 기다리고 있지 않습니다. 나는 돌아갈 수 있습니다. 문이 호출 후 MessageDialog를 표시하기 전에 호출되고 Dispatcher.RunAsync 호출을 기다리는 경우 다시 UI 스레드가 잠겼습니다. 다른 생각? – user2334154