/// <summary>
        /// 작업을 다른 스레드에서 실행하고 프로세스 창을 엽니다.
        /// </summary>
        public static void Run(Action action, bool isCancelable, bool isProgressBar)
        {
            var vProgress = new VMProgressDialog(
                (isCancelable == true) ? Cancelable.Yes : Cancelable.No,
                (isProgressBar == true) ? IsProgress.Yes : IsProgress.No);
            var wProgress = new ProgressDialog(vProgress);

            ProgressManager.Initialize();
            Exception exception = null;

            Task.Factory.StartNew(() => {
                try {
                    Thread.Sleep(100);
                    action();
                }
                catch (Exception ex) {
                    exception = ex;

                    return;
                }
            }, ProgressManager.CancellationToken).ContinueWith(w => {
                wProgress.Close();
            }, TaskScheduler.FromCurrentSynchronizationContext());
            wProgress.ShowDialog();
            if (exception != null)
            {
                if (exception is OperationCanceledException)
                {
                    return;
                }
                throw exception;
            }
        }
        internal ProgressDialog(VMProgressDialog viewModel)
        {
            InitializeComponent();

            Owner = Application.Current.MainWindow;

            DataContext = viewModel;
        }