Простая проблема потоков с Windows Service - PullRequest
3 голосов
/ 05 сентября 2010

Я раньше не писал службы Windows и думал, что все идет хорошо, пока не развернул ее для жизни. В dev он работает нормально, и опрос отлично, но как только он запускается в производство, он падает на свою обратную сторону после первого цикла.

The exception I recieve is: 
Application: ProgramName.WinService.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Exception
Stack:
   at ProgramName.WinService.UpdateChecker.StartChecks()
   at ProgramName.WinService.UpdateChecker.StartPolling()
   at System.Threading.ThreadHelper.ThreadStart_Context(System.Object)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Threading.ThreadHelper.ThreadStart()

и вот код, который делает цикл:

        private readonly Thread pollingThread;

   public UpdateChecker()
    {
        pollingThread = new Thread(StartPolling);
        InitializeComponent();
    }

        protected override void OnStart(string[] args)
        {
            pollingThread.Start();
        }

        protected override void OnStop()
        {
            pollingThread.Abort();
        }


        protected void StartPolling()
        {
            do
            {
                StartChecks();  

                //10 seconds
                Thread.Sleep(10000);
            } while (true);

        }

Кто-нибудь имеет представление, почему это может упасть после первого запуска? я делаю что-то глупое?

Это метод, вызывающий проблему:

публичная статическая строка GetXmlFromFeed (строка strUrl) { var rssReq = WebRequest.Create (strUrl); var rep = rssReq.GetResponse (); вернуть новый StreamReader (rep.GetResponseStream ()). ReadToEnd (); }

На GetResponse ()

возможен тайм-аут и вообще ничего общего с потоками

1 Ответ

1 голос
/ 05 сентября 2010

Глядя на трассировку стека исключений, кажется, что StartChecks выбрасывает исключение, которое не обрабатывается, и распространяется в вызывающий поток ( это поведение было введено в .NET 2.0 , как и ранее, возникающие исключениядочерние темы не были распространены).

Попробуйте поместить вокруг него try/catch, чтобы обработать это исключение.

...