Поэтому я продолжаю получать сообщение об ошибке RPC_E_SERVERCALL_RETRYLATER «Приложение занято» со следующим кодом. Стоит отметить, что этот точный код прекрасно работал с файлами Word 2003 и .doc. После обновления до 2007 года он больше не работает. Файл, в котором он получает счетчик разделов, является «.docx», и я убедился, что использовал правильную версию взаимодействия. Ошибка возникает в случайном месте в коде обычно.
public int GetSectionsCount(string fileName) {
wrdApp = new Application();
Object file = fileName;
Documents docs = wrdApp.Documents;
wrdDoc = docs.Open(ref file, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing,
ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing,
ref oMissing,
ref oMissing);
int count = wrdDoc.Sections.Count;
wrdDoc.Close(ref oFalse, ref oMissing, ref oMissing);
wrdApp.Quit(ref oFalse, ref oMissing, ref oMissing);
Marshal.ReleaseComObject(docs);
Marshal.ReleaseComObject(wrdDoc);
Marshal.ReleaseComObject(wrdApp);
wrdDoc = null;
wrdApp = null;
return count;
}
Пример трассировки стека:
at Microsoft.Office.Interop.Word.DocumentClass.get_Sections()
at MyApplication.WordMerge.split(String fileToSplit, String whereToSave, String quarterExtension, Form1 pb) in\\Projects\\MyApplication\\WordMerge.cs:line 176
at MyApplication.PMLettersManager.DoSplits() in \\Projects\\PyForms3\\PMLettersManager.cs:line 179
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
Код выполняется в своем собственном потоке, и никакой другой код автоматизации MS Word не запускается одновременно. Опять же, до обновления все работало нормально.
РЕДАКТИРОВАТЬ: Когда я сохранял рассматриваемый файл как .DOC вместо .DOCX, не было ошибок, и код работал нормально.