我正在使用Windows表单和dotnet 3.5
我想在删除文件之前添加2或3秒延迟
//need 2 or 3 second delay here
File.Delete("d:\testing.txt");
我需要延迟只是因为在删除之前执行了另一个操作而没有延迟File.Delete给出了另一个进程正在使用该文件的异常
谢谢,
修改1
我不能完整的代码。 删除文件之前的操作是
System.IO.File.Move(d:\"log.rtf", d:\testing.txt");
答案 0 :(得分:1)
如果你想在这里使用延迟,似乎你没有走上正轨。
这是一个线程同步问题。
最简单的方法是lock
关键字。如果使用lock
同步某些代码,则只有一个线程能够输入受保护的代码,直到其他代码释放锁定。
例如,如果您声明private readonly object _sync = new object();
类字段,并按以下方式更改代码...
lock(_sync)
{
File.Delete(@"d:\testing.txt");
}
...以及在整个删除之前发生的File.Move
对同一个_sync
对象使用锁定...
lock(_sync)
{
System.IO.File.Move(@"d:\log.rtf", @"d:\testing.txt");
}
...整个File.Delete
将等到File.Move
释放锁定(即lock
块结束)。
另一方面,如果我们正在讨论多个流程(使用同一文件的不同应用程序或服务),那么您需要Mutex
。互斥体可以在整个流程中进行命名和共享,并且它可以像上面的代码lock
一样阻塞(实际上,这是使用Monitor
):
您的代码如下所示:
// Note mutexes must be instantiated using the same name in both processes!
Mutex mutex = new Mutex(false, "FileMutex");
mutex.WaitOne();
try
{
File.Delete(@"d:\testing.txt");
}
finally
{
mutex.ReleaseMutex();
}
和...
Mutex mutex = new Mutex(false, "FileMutex");
mutex.WaitOne();
try
{
File.Move(@"d:\log.rtf", @"d:\testing.txt");
}
finally
{
mutex.ReleaseMutex();
}
另请注意.WaitOne(...)
有一个超载,可以接受超时。
详细了解Mutex
on MSDN。