Hej alla, Är det inte lättare att köra metoden i en separat tråd som du sedan dödar när servicen stoppas? Tack för ditt svar, Om du sätter en tråd till .IsBackground = true; Tack Robert skrev:Problem med events och trådar och sånt
Jag har en Windows Service som i en intervall (timer) kallar på en method (som ligger i en annan assembly - dll fil) för att göra vissa grejer. och det fungerar.
vad jag vill göra är att det kan hända att servicen stoppas. Assembly:n som innehåller metoden har en property som blir false om Servicen stoppas. Vad jag vill göra är att metoden sluta köra så fort propertyn har blivit false altså Windows servicen är stoppad.
måste jag använda trådar och events? att metoden ska köras under en worker tråd som kollar hela tiden om propertyn är true (vanlig if-stats) och i Windows Servicens OnStop() method raisa event ?? går det så? eller hur kan jag fixa detta? behöver lite kod.
tack så väldigt mycketSv: Problem med events och trådar och sånt
Typ:
Servicens OnStart kallas
Thread t = new Thread(MinMetod)
Servicens OnStop kallas
t.Abort()
Känns lättare att döda tråden från "huvud" tråden än att ha den metoden kollandes en property. Dock bör du i din metod ha en try catch för ThreadAbortException som kommer kastas när man aborterar tråden. Kanske inte jätte snyggt, men lättare...Sv:Problem med events och trådar och sånt
en sak som jag inte vet är att på OnStart() skapar jag trådar som startar andra assemblys metoder.
Vad händer med tråden om inget exception eller fel händer? dör den själv eller efter att den han gjort sitt jobb ska jag kalla på Abort()??
tack igenSv: Problem med events och trådar och sånt
så dör den tillsammans med maintråden. iaf så fungerar det så i WinForms.
Men antar att det gäller samma för tex en service.Sv:Problem med events och trådar och sånt
blir inte nån form av minnesläckage (eller annat problem) om en NT service skapar trådar var 30 sekund. trådarna startar metoder som kommunicerar med DB och gör annat.
WindowsService ---> tråd1 --- startar ---> dll1.class1.metod1
---> tråd2 --- startar ---> dll2.class2.metod2
---> tråd3 --- startar ----> dll3.class3.metod3
i varje class 1, 2 och 3 har jag följande kod:
classerna
{
private Thread ThisWorkerThread;
metoderna
{
try
{
ThisWorkerThread = Thread.CurrentThread;
....
//gör allt annat
.......
}
catch(exception ex)
{
//gör vissa grejer och
ThisWorkerThread.Abort();
}
}
}Sv: Problem med events och trådar och sånt
__________________
vad jag vill göra är att det kan hända att servicen stoppas. Assembly:n som innehåller metoden har en property som blir false om Servicen stoppas. Vad jag vill göra är att metoden sluta köra så fort propertyn har blivit false altså Windows servicen är stoppad.
__________________
Om du startar metoden i en ny tråd så kan du skicka använda tråden.Interrupt(); ifrån servicens OnStop() så kastas ett ThreadInterruptedException i din metod som du då kan fånga och hantera snyggt och då även köra viss kod i "finally"