그래서 다음 코드와 함께 "응용 프로그램이 사용 중입니다"RPC_E_SERVERCALL_RETRYLATER 오류가 계속 발생합니다. 이 정확한 코드가 Word 2003 및 .doc 파일에서 제대로 작동한다는 점은 주목할 가치가 있습니다. 2007로 업그레이드 한 후에는 더 이상 작동하지 않습니다. 섹션 수를 얻는 파일은 ".docx"이며 올바른 버전의 interop을 사용해야합니다. 이 오류는 일반적으로 코드의 임의의 위치에서 발생합니다.MS Word Interop C# RPC_E_SERVERCALL_RETRYLATER 오류
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 워드 자동화 코드가 동시에 실행되지 않습니다. 업그레이드 이전에 다시 작동했습니다.
편집 : 문제의 파일을 .DOC 대신 .DOC로 저장하면 오류가없고 코드가 정상적으로 작동합니다.
Word 2003에서 제대로 작동했습니다. 영향을 미칩니 까? – jle
스레딩이 믹스에 포함되어있을 때 문제는 이미있을 수 있지만 아무런 징후도없고 간단한 변경으로 인해 경쟁 조건에 부딪치게됩니다. 나는 오류가 여전히 발생하는지 확인하기 위해 스레딩을 제거하려고합니다. –
오류가 여전히 발생합니다 ... – jle