2017-02-21 24 views
-1

У меня есть консольное приложение, которое не оканчивается с помощью кодаВедения консольного приложения от закрытия, но все еще работают коды

new System.Threading.AutoResetEvent(false).WaitOne(); 

То, что я хочу добиться: Я хотел бы запустить StopWatch и если она отвечает при условии, что он будет запускать определенные файлы, управляющие кодами. И затем, наконец, после блока кода, сбрасывает таймер и ждет, пока он снова будет true, чтобы повторить попытку.

Проблема: Однако после отладки я не могу получить свой код, чтобы пройти через мои условия, даже если он уже прошел требуемое условие.

Мой код:

static void Main(string[] args) 
    { 
     string mutex_id = "41585f436f766572743243494d"; 
     using (System.Threading.Mutex mtx = new System.Threading.Mutex(false, mutex_id)) 
     { 
      if(!mtx.WaitOne(0,false)) 
      { 
       return; 
      } 
      processTimer = new Stopwatch(); 
      processTimer.Start(); 

      if (processTimer.Elapsed.Seconds > 10) 
      { 
       processTimer.Stop(); 
       fileQueue = Directory.GetFiles(ConfigurationManager.AppSettings["WatchPath"], ConfigurationManager.AppSettings["Format"]).ToList(); 
      } 
      //process the fileQueue 
      //.. 
      //.. 
      //processTimer.Reset(); -> Reset Timer to wait for another 10 sec and process again 
      new System.Threading.AutoResetEvent(false).WaitOne(); 
     } 
    } 

Я использовал FileSystemWatcher раньше, но я не смог правильно начать процесс (как последовательные/Параллельные творения файлов и такие). Пробовал Threading и Timers как мой question.

Теперь я пытаюсь подойти к этому вопросу с новой точки зрения. Надеюсь, некоторые могут просветить меня этим.

+0

Почему вы с помощью [ 'StopWatch'] (https://msdn.microsoft.com/en-us/library/ system.diagnostics.stopwatch (v = vs.110) .aspx), а не, скажем, ['Таймер'] (https://msdn.microsoft.com/en-us/library/system.threading.timer (v = vs.110) .aspx)? –

ответ

2

В вашем коде нет «повторите попытку».

Код, который вы написали делает следующее:

  1. Создать семафор и зафиксировать его
  2. Если он уже существует, закройте программу
  3. Пуск секундомера
  4. Проверить, если 10 секунд прошло (чего у них не было)
  5. Создайте новый AutoResetEvent и еще чего-нибудь ожидают

Вам потребуется некоторый цикл, который периодически проверяет, если прошло 10 секунд, а в противном случае Sleep

+0

Да, это выяснилось за несколько часов до этого. Просто сделал бесконечный цикл while и делал. В любом случае, спасибо. – Hexxed

 Смежные вопросы

  • Нет связанных вопросов^_^