0

В настоящее время я тестирую сторонний API, где некоторые события запускаются с удаленного сервера, который я пытаюсь захватить с помощью простого приложения консоли Windows.Событие захвата приложения консоли только при запуске из Visual Studio

Мой сценарий работает гладко, пока я запускаю консольное приложение нажатием F5. События фиксируются и отображаются в реальном времени, как и должны.

Итак, я попытался развернуть приложение и запустить его автономно. Конечно, теперь main() завершает выполнение программы, как только у нее заканчиваются команды. Я пробовал несколько решений, которые я нашел в таких вопросах, как How to keep a .NET console app running? или What is the best way to keep a C# Console app running.

Использование бесконечного цикла, ожидающего ввода пользователем или waitone() для закрытия события, привело к состоянию блокировки, в котором события больше не могут быть захвачены.

Итак, я откровенно спрашиваю, есть ли способ запустить мою консоль, эмулирующую ее работу с отладчиком Visual Studio?

Просто для справки вы можете найти мой пример кода:

class Program 
    { 

     static void Main(string[] args) 
     { 
      Program program = new Program(); 

      //Login to third-part API service 
      Net2 net2 = new Net2(); 
      net2.Login(); 

      //Monitor events from a devoce 
      net2.client.MonitorAcu(1172079); 
      Console.WriteLine("Monitoring ACU #1172079. Listening for events..."); 

      //Subscribe for events 
      net2.client.Net2AccessEvent += new OemClient.Net2AcuEventHandler(program.Net2AccessEvent); 

     } 

     private void Net2AccessEvent(object sender, IEventView e) 
     { 
      Console.WriteLine("An event was captured!"); 
     } 
    } 
+0

Вы можете сделать что-то вроде огня, близкого к событию, или дождаться нажатия клавиши с помощью спальных мест, чтобы остановить блокировку. Как вы хотите это положить? – doctorlove

+0

Я также попытался использовать такой подход, как тот, который вы ссылаетесь, используя 'waitone()' для некоторого закрывающего события или флага, но это также приводит к блокировке захвата события. В качестве следующего шага я стремился развернуть это как сервис Windows, чтобы он мог работать постоянно в фоновом режиме, как только я начинаю и останавливаю службу. Так что пока просто прекратить все приложение, чтобы остановить мониторинг, хорошо для меня. – LePhleg

+1

Вы пытались добавить Console.Read(); наконец, в основном методе? Возможно, это сработает. –

ответ

2

Добавить

Console.Read(); 

наконец в главном методе. Это не позволит закрыть приложение, пока пользователь не нажмет любую клавишу, и он также не будет блокировать обработчик событий.

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