2015-03-09 2 views
-3

Я написал процесс в vb.net, который пишет несколько текстовых файлов на основе SQL-запросов. Я хотел бы поставить «временной разрыв» после или перед каждым методом, чтобы замедлить процесс. Может быть, как через минуту или две. Я чувствую, что это может быть решением проблемы, с которой я столкнулся с последним методом (текстовым файлом). Когда-нибудь и некоторое время я получу исключение, которое гласит: «ИСКЛЮЧЕНИЕ ЗАПИСАН: процесс не может получить доступ к файлу« D: \ ORG.TXT », потому что он используется другим процессом». Я думаю, что другие методы могут каким-то образом заблокировать это от запуска. Если кто-нибудь почувствует, что может быть лучшее решение, дайте мне знать.Временные разрывы между методами vb .net

+4

Я прочитал ваш вопрос, как «что-то происходит между моими методами, что приводит к пространственно-временной континуум шалить». Вы не указали какой-либо код, поэтому мы не можем вам помочь с этой проблемой. То, что вы хотите, называется задержкой. Вставка задержки в ваш код НЕ является хорошим решением. Попытайтесь выяснить, почему возникает проблема, и устраните основную причину. – Neolisk

+0

Я не уверен, что здесь происходит, так как @Mike Haff не включал код ... но у меня это случилось с сторонними дополнениями, которые делают работу над файлами и сообщают нам о том, что они сделаны, Фактически, они все еще держатся за файл и препятствуют дальнейшей обработке. –

+1

Если ваш код структурирован таким образом, что возможно, что два потока могут попытаться записать в один и тот же файл одновременно, то одним из возможных решений является использование [SyncLock] (https://msdn.microsoft.com/en-us /library/3a86s51t%28v=vs.100%29.aspx). Добавление задержек - ужасная идея, как говорит @Neolisk и, вероятно, вызовет у вас больше проблем, чем они, по-видимому, вылечат. –

ответ

0

System.Threading.Thread.Sleep()

Однако, вы также можете создать рекурсивный метод, который пытается получить доступ к файлу, и если он не может, спит затем пытается снова. Вам нужно будет остановить его в какой-то момент, чтобы он не продолжался и продолжался вечно. (Psuedocode)

If trythefile() 
    do stuff with the file 
Else 
    fail 
End If 

function trythefile() 
    try 
     attempts + 1 
     access the file 
     return true 
    catch 
     sleep for a bit 
     If attempts < 10 
      trythefile() 
     Else 
      return false 
     End if 
end function 
Смежные вопросы