2011-01-28 7 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();コメントを外すとき次の2行は実行されません

どのようなアイデアですか?

+0

どのように文書を開いていますか? –

+0

ファイルを削除するには、文書を閉じておく必要があります。 Close()コールでクラッシュする理由を調べ、try/catchステートメントをすべて削除します。 –

+0

@マークAvenius:最初にアプリケーションオブジェクトを作成しました: Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application(); 次に、 "app.Documents.Open()"メソッドを使用します。 –

答えて

1

このコードはおそらく競合状態になる可能性があります。スリープソリューションを信頼してはいけません。特定のイベントまたは投票を待ってから、行動を起こしてください。

0

さて、私はそれを解決しました!

ここに私のコードsnippentです:

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

関連する問題