CLOSE事件后如何保存和删除文件?

时间:2011-01-28 20:07:45

标签: c# winforms

我有一个将word文档存储在数据库中的程序,它们被用户重复打开,关闭,然后保存回数据库。 打开时我将它们放在临时文件夹中。 但是当我关闭时,我想保存回到数据库然后直接删除它。

我试过了:

...

((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 :(得分:1)

此代码可能会受到竞争条件的影响。永远不要相信睡眠解决方案。等待特定事件或投票,然后采取行动。

答案 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);
    }
}