-1

アプリケーションで savefiledialog を使用してファイルを保存します。同じファイル名が既に存在する場合、置換するかどうかを尋ねるポップアップが表示されます。いいえを指定すると、予期しないシステム例外が発生します以下はコードの一部です

string fname1 = "";

saveFileDialog.Title = "Save the Proofer Report";
saveFileDialog.Filter = "Excel Files (*.xls)|*.xls";
saveFileDialog.FilterIndex = 0;
saveFileDialog.InitialDirectory = "MyDocuments";
saveFileDialog.FileName = "Proofer Report";
aveFileDialog.AddExtension = true;
saveFileDialog.ShowHelp = true;

// saveFileDialog.ShowDialog();

Invoke((Action)(() => { saveFileDialog.ShowDialog(); }));
fname1 = saveFileDialog.FileName;


                xlWorkBook.SaveAs(fname1, Excel.XlFileFormat.xlWorkbookNormal,       misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
 //system exception during save as
                xlWorkBook.Close(true, misValue, misValue);
                xlApp.Quit();

スタックトレース

Microsoft.Office.Interop.Excel._Workbook.SaveAs (オブジェクト ファイル名、オブジェクト FileFormat、オブジェクト パスワード、オブジェクト WriteResPassword、オブジェクト ReadOnlyRecommended、オブジェクト CreateBackup、XlSaveAsAccessMode AccessMode、オブジェクト ConflictResolution、オブジェクト AddToMru、オブジェクト TextCodepage、オブジェクト TextVisualLayout、オブジェクト ローカル) でProoferXML.MainForm.ProcessDocument(BackgroundWorker worker, DoWorkEventArgs e) in D:\ProoferXML\WindowsFormsApplication1\WindowsFormsApplication1\MainForm.cs:665行目 ProoferXML.MainForm.prooferWorker_DoWork(Object sender, DoWorkEventArgs e) in D:\ProoferXML\WindowsFormsApplication1\WindowsFormsApplication1 \MainForm.cs:1457行目

HRESULT から例外を取得する workbook.saveAs を使用して Excel を保存する場合:

4

1 に答える 1

0

ほとんどの場合、使用しているスレッド モデルに注意を払う必要があります。Invoke を呼び出す前に InvokeRequired を確認することをお勧めします。したがって、コードは次のようになります。

 if (InvokeRequired)
 {
   Invoke((Action)(() => { saveFileDialog.ShowDialog(); }));
 }
 else
 {
   saveFileDialog.ShowDialog();
 }

Invoke Invoke(Delegate)をもっと読む

于 2013-09-06T07:16:43.197 に答える