如何添加无线程延迟.使用c#休眠几秒钟



我使用的是Windows form和dotnet 3.5

我想在删除文件前添加2或3秒的延迟

//need 2 or 3 second delay here
File.Delete("d:testing.txt");

我需要延迟只是因为在删除之前执行了另一个操作并且没有延迟文件。Delete会导致文件被另一个进程使用的异常

谢谢,

编辑1

我不能整个代码更大。删除文件前的操作如下

System.IO.File.Move(d:"log.rtf", d:testing.txt");

如果您想在这里使用延迟,那么您似乎没有在正确的轨道上。

这是一个线程同步问题。

最简单的方法是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(...)有一个接受超时的过载。

在MSDN上了解Mutex的更多信息

最新更新