Je n'ai jamais écrit un service Windows avant et j'ai pensé que tout allait bien jusqu'à ce que je l'ai déployé pour vivre. En dev ça marche bien et le polling est génial, mais dès qu'il est en production il tombe sur son dos après sa première boucle.Problème de thread simple avec le service 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()
et est le code ici qui fait la mise en boucle:
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);
}
Est-ce que quelqu'un a une idée pourquoi ce serait tomber après avoir exécuté la première fois? est-ce que je fais quelque chose de stupide?
Cette méthode est la cause du problème:
public static string GetXmlFromFeed (string strUrl) {var rssReq = WebRequest.Create (strUrl); var rep = rssReq.GetResponse(); return new StreamReader (rep.GetResponseStream()). ReadToEnd(); }
Sur le GetResponse()
possible un temps et rien à voir avec le filetage du tout alors
L'exception est lancée dans 'StartChecks'; pouvez-vous partager le code de cette méthode? –
Une suggestion de note de côté: Je voudrais changer .Abort() à la définition d'un booléen bStopThreads = true, puis rejoindre le fil de travail avec .Join() Si ce délai expire, puis appelez .Abort(). Utilisez votre bStopThreads dans votre boucle while. – hydrogen
Des exceptions internes? – cwap