Я до сих пор не писал службы Windows и думал, что все идет хорошо, пока я не развернул ее, чтобы жить. В dev он отлично работает, и опрос очень хорош, но как только он выходит в производство, он падает на свою заднюю часть после первого цикла.Простая проблема с потоками с услугой Windows
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) { вар rssReq = WebRequest.Create (strUrl); var rep = rssReq.GetResponse(); возвращает новый StreamReader (rep.GetResponseStream()). ReadToEnd(); }
На GetResponse()
возможно время, и ничего общего с резьбой на всех, то
Исключение выбрасывается внутри 'StartChecks'; можете ли вы поделиться кодом этого метода? –
Рекомендация со стороны: я бы изменил .Abort() на установку boolean bStopThreads = true, а затем соединение с рабочим потоком с .Join() Если это время, вызовите .Abort(). Используйте bStopThreads в цикле while. – hydrogen
Любые внутренние исключения? – cwap