2011-01-28 6 views
1

나는 워드 문서를 데이터베이스에 저장하는 프로그램을 가지고 있으며, 반복적으로 열리고 사용자가 닫은 다음 다시 데이터베이스에 저장한다. 열 때 임시 폴더에 배치합니다. 하지만 닫을 때 데이터베이스에 다시 저장 한 다음 직접 삭제하려고합니다. 작동하지 않는CLOSE 이벤트 후 문서를 저장하고 삭제하는 방법은 무엇입니까?

... 

((DocumentEvents_Event)document).Close += DocumentClose; 

... 

delegate void MethodDelegate(); 

private void DocumentClose() 
{ 
    new MethodDelegate(deleteLater)(); 
} 

void deleteLater() 
{ 
    //document.Close(); 
    Thread.Sleep(1000); 
    File.Delete(this.tempDocFilePath); 
} 

하지만, 나는 오류 메시지 파일이 이미 열려 말해을 얻을 :

나는이 시도. 및 "document.Close();"주석 처리를 제거 할 때 다음 두 라인은 exceled되지 않습니다

어떤 아이디어?

+0

어떻게 문서를 열고 있습니다 :

여기 내 코드 snippent입니까? –

+0

파일을 삭제할 수 있도록 문서를 닫아야합니다. Close() 호출에서 충돌이 발생하는 이유를 확인하고 try/catch 문을 제거하십시오. –

+0

@ Mark Avenius : 먼저 응용 프로그램 개체를 만들었습니다. Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application(); 그런 다음 "app.Documents.Open()"메서드를 사용합니다. –

답변

1

이 코드는 경쟁 조건이있을 수 있습니다. 절대로 슬립 솔루션을 신뢰하지 마십시오. 특정 이벤트 나 설문 조사를 기다렸다가 조치를 취하십시오.

0

그래, 해결 했어!

private static Thread oThread = new Thread(new ParameterizedThreadStart(delete)); 

... 

((DocumentEvents_Event)document).Close += DocumentClose; 

... 


private static void DocumentClose() 
{ 
     oThread.Start(path); 
} 

static void delete(object path) 
{ 
    try 
    { 
     File.Delete((string)path); 
    } 
    catch (Exception) 
    { 
     Thread.Sleep(500); 
     delete(path); 
    } 
} 
+1

필요하지 않을 때 재귀를 사용하지 마십시오. StackOverflow 예외를 트리거 할 수 있습니다. while 루프를 사용하십시오. – Tergiver

관련 문제