我有一个将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();”接下来的两行不会被解雇
任何想法?
答案 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);
}
}