好像你在正確的軌道,如果你想在這裏使用的延遲不是。
這更是一個線程同步的問題。
最簡單的方法是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。
看起來你的問題更大。介意顯示「整個」代碼? – Kilazur
如果該文件在2秒或3秒後仍被另一個進程使用,該怎麼辦? –
你應該檢查文件是否被另一個進程使用,如果不是,刪除它,如果是,重新運行循環,直到它被釋放或者給出消息。 – Max