Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用c在没有thread.sleep的情况下添加延迟数秒#_C#_Winforms - Fatal编程技术网

C# 如何使用c在没有thread.sleep的情况下添加延迟数秒#

C# 如何使用c在没有thread.sleep的情况下添加延迟数秒#,c#,winforms,C#,Winforms,我正在使用Windows窗体和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

我正在使用Windows窗体和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
同步某些代码,则只有一个线程能够进入受保护的代码,直到其他代码释放锁

例如,如果您声明一个
私有只读对象_sync=new object()类字段,您可以按如下方式更改代码

lock(_sync) 
{
     File.Delete(@"d:\testing.txt");
}
…而且在整个删除之前发生的
File.Move
,对相同的
\u sync
对象使用锁

lock(_sync)
{
     System.IO.File.Move(@"d:\log.rtf", @"d:\testing.txt");
}
…整个
文件.Delete
将等待
文件.Move
释放锁(即
块结束)

另一方面,如果我们讨论的是多个进程(不同的应用程序或服务使用同一个文件),那么您将需要一个
互斥体。互斥体可以在进程之间命名和共享,并且与上面的代码使用
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(…)
有一个重载,它接受超时


了解有关互斥锁的更多信息

看起来您的问题更大。介意显示“完整”代码吗?如果文件在2秒或3秒后仍被另一个进程使用,该怎么办?您应该检查该文件是否被另一个进程使用,如果没有删除它,如果是,则重新运行循环,直到它被释放,或者给出一条消息。使用thread.sleep方法有什么问题?您可以设置计时器。您可能需要准备好重试几次并处理错误。很好,我从来没有想过这样的事情exist@UzairAli没问题,这就是为什么像这样的网站是有用的!