public ProgressWindowView(ProgressViewModel model)
     : this()
 {
     DataContext = model;
 }
 public static void ExecuteAsyncOperation(Func<Action<OperationState>, Action, CancellationTokenSource> asyncOperation)
 {
     CancellationTokenSource cancelationToken = null; ;
     ProgressViewModel model = new ProgressViewModel(() =>
     {
         if (cancelationToken != null)
         {
             cancelationToken.Cancel();
         }
     });
     ProgressWindowView progressWindow = new ProgressWindowView(model);
     progressWindow.Loaded += (s, e) =>
     {
         cancelationToken = asyncOperation(
             state => App.AppContext.Dispatcher.BeginInvoke(new Action(() =>
             {
                 if (state.Exception != null) {
                     progressWindow.Close();
                     throw state.Exception;
                 }
                 model.OperationState = state;
             })),
             () => App.AppContext.Dispatcher.BeginInvoke(new Action(progressWindow.Close)));
     };
     progressWindow.SetCurrentWindowAsOwner();
     progressWindow.ShowDialog();
 }