Implementing ShowDialog() style functionality without disabling any other windows
Using ManualResetEvent this way means that you're blocking a thread unnecessarily while the dialog is shown. Instead, you should use TaskCompletionSource, which allows you to create a Task that completes when you want it to.

Encapsulated into a method, the code could look something like this:

public static Task&lt;bool&gt; ShowAsync()
{
    var tcs = new TaskCompletionSource&lt;bool&gt;();
    var dialog = new DialogWindow(tcs.SetResult);
    dialog.Show();
    return tcs.Task;
}