WinUi ContentDialog await를 ContentDialogButtonClickDeferral로 제어하기

WinUi의 ContentDialog는 특이하게 작동한다. 버튼 클릭 이벤트 메떠드에 await가 있으면 다이어로그를 닫고 기다린다. await가 작동하는 동안 메시지를 출력하는 등의 작업을 원칙적으로 할 수 없다.

await가 작동하는 동안 다이어로그를 사라지지 않게 하려면 ContentDialogButtonClickDeferral를 써야 한다.

async void OnContentDialogPrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
{
    ContentDialogButtonClickDeferral deferral = args.GetDeferral();

    await Task.Run(...);

    deferral.Complete();
}