public void ReconstructKeywordHTTP() { HTTPReconOptionDialog reconDlg = new HTTPReconOptionDialog(); reconDlg.Owner = App.Current.MainWindow; if (reconDlg.ShowDialog() != true) { return; } List <string> keywords = reconDlg.Keywords.ToList(); var dlg = new CommonOpenFileDialog(); dlg.IsFolderPicker = true; var res = dlg.ShowDialog(); if (res == CommonFileDialogResult.Ok) { ProgressDialog pdlg = new ProgressDialog(); pdlg.Owner = Application.Current.MainWindow; pdlg.Works += (o, ea) => { var tuple = (Tuple <BackgroundWorker, object>)ea.Argument; BackgroundWorker worker = tuple.Item1; ProgressChangedEventHandler h = (sender, e) => { worker.ReportProgress(e.ProgressPercentage, e.UserState); }; Fsource.ProgressChanged += h; try { Fsource.KeywordHttpReconstruct(dlg.FileName, keywords); } finally { Fsource.ProgressChanged -= h; } }; pdlg.AddProgressChangedHandler((o, e) => { Tuple <FileAnalyze.ProgressSource, object> t = e.UserState as Tuple <FileAnalyze.ProgressSource, object>; if (t.Item1 == FileAnalyze.ProgressSource.HttpReconstruct) { pdlg.ProgressValue = e.ProgressPercentage; pdlg.ProgressString = (string)t.Item2; } }); pdlg.ShowDialog(); } }