我有一個腳本可以在多個線程上創建文件。偶爾,我會在document.SaveAs以下錯誤()調用:文檔文件將無法正常保存
{「Word無法保存或創建此文件確保硬盤,您 要保存文件上不充分,寫保護,或已損壞\ r (C:\ ... \ fileName.docx)。「}
這是鬱悶,因爲它似乎發生有時,而不是別人。我一直在花費最後一天的時間來解決問題,而且進展甚微。我排除的一件事是可能有多個線程試圖創建相同的文件。我確信這不會發生。在我的代碼中是否存在任何會導致這種情況的錯誤,或者這只是使用com對象時的一個事實?我正在做什麼代碼教程在那裏說,也許我應該放棄使用多線程?
BuildDocumentsThread(){
var word = new Microsoft.Office.Interop.Word.Application();
word.Options.CreateBackup = false;
var wordQuit = (Microsoft.Office.Interop.Word._Application)word;
foreach(var value in values){
FormBuilder.BuildSummaryForm(word, value);
}
wordQuit.Quit();
}
public static void BuildSummaryForm(Application word, string value) {
var summaryFormPath = Utilities.GetSummaryFilePath(value);
if (File.Exists(summaryFormPath))
File.Delete(summaryFormPath);
object path = summaryFormPath;
object readOnly = false;
object o = System.Reflection.Missing.Value;
var document = word.Documents.Add(ref o, ref o, ref o, ref o);
document.Activate();
Paragraph p1 = document.Content.Paragraphs.Add(ref o);
p1.Range.Font.Name = "Arial";
p1.Range.Font.Size = 10;
p1.Range.Text = value;
document.SaveAs(ref path, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o);
document.Close();
}
SaveAs方法不是線程安全的(http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.documentclass.saveas(v = office.11)的.aspx)。另外,如果文件正在被另一個進程保存或打開,您可能會遇到此錯誤。 – 2012-02-22 15:26:49
我必須問的第一件事:你在運行這個應用程序時沒有打開MS Word嗎? – ardnew 2012-02-22 15:26:55
@JohnKoerner,由於不是線程安全的,這是否意味着它不應該與多個線程一起使用?我不明白頁面的含義:「任何公共靜態(在Visual Basic中爲Shared)成員都是線程安全的。」另外,我知道只有一個線程一次訪問單個文件。 – sooprise 2012-02-22 15:28:20