private void WaitUntilStarted(string processName)
{
_logger.WriteLine("Waiting until '{0}' starts.", processName);
var dialog = new WaitDialog();
var dispatcher = Dispatcher.CurrentDispatcher;
using (var cancellation = new CancellationTokenSource()) {
_waitSource.WaitForAsync(processName, cancellation.Token).ContinueWith(_ => {
dispatcher.Invoke((Action)dialog.Close, DispatcherPriority.Send);
AttachTo(processName);
}, TaskContinuationOptions.OnlyOnRanToCompletion);
dialog.Model = new WaitDialogModel(processName, _waitSource.IsEfficient);
var result = dialog.ShowModal();
if (result == false)
cancellation.Cancel();
}
}