# Implementing ShowDialog() style functionality without disabling any other windows

I need a simple prompt window to ask the user to do something with an OK/Cancel return. But I also need all Windows to remain functional, so a xx.ShowDialog isn't appropriate.

This is my attempt. DialogWindow takes a Delegate in the constructor and calls it when OK or Cancel is clicked with a True/False parameter respectively. The Window is coded to take top Z priority.

It seems to work but I'm not very knowledgeable on await usage. Is there an easier way?

        bool result;
ManualResetEvent manualReset = new ManualResetEvent(false);
DialogWindow myDialog = new DialogWindow((dialogResult) =>
{
result = dialogResult;
manualReset.Set();
});
myDialog.Show();
{
manualReset.WaitOne();
});
//Do something with result

• You could do the same by making sure the TopMost property of the dialog form is set to true. Now the Show() method will place the dialog on top and any other forms can still take focus. Once a new dialog form is instantiated you can access any of its controls and properties that aren't private. – tinstaafl Oct 9 '14 at 20:36

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.
public static Task<bool> ShowAsync()