/// <summary> /// 進捗表示処理 /// </summary> /// <param name="processName">処理名</param> /// <param name="executor">処理実体</param> public static void ProgressProcess(string processName, ProgressExecutorBase executor) { // Workerを持つプログレスダイアログを生成 using (var dlg = new DlgProgress(processName, executor.Execute)) { // 表示と共に処理開始. var result = dlg.ShowDialog(); // 終了処理呼び出し. executor.Closing(); // 結果を取得する if (DialogResult.Cancel == result) { // キャンセル. Log.Write("キャンセルされました。"); } else if (DialogResult.Abort == result) { // エラー情報を表示. Log.Write("エラー: {0}".Fmt(dlg.Error.Message)); } else if (DialogResult.OK == result) { // 正常終了. } } }
/// <summary> /// 検索処理. /// </summary> private void Search(bool analyze) { this.btnExec.Enabled = false; try { this.Requirements.Save(); // 検索処理オブジェクトを格納. SearchEngine engine = null; // 検索処理を取得. engine = SearchEngine.GetSearchEngine(); engine.SetParam(this.Requirements, this, analyze); if (Ssm.Config.ShowDebugLog) { Log.Write("【DEBUG】Search Engine >> [{0}]".Fmt(engine.GetId())); } if (Ssm.Config.EnableAsyncExec) { // 進捗表示機能付き非同期処理. // 非同期なのでIMainFormのSetResultで結果を格納する. DlgProgress.ProgressProcess(@"検索.", engine); } else { // 同期実行. var result = engine.Search(); // 結果を格納. this.SetResult(result); } } finally { this.btnExec.Enabled = true; } }