Försöker att använda mig av en timer i en windows tjänst men jag får det ej att fungera. Jag har följande kod: Troligtvis för att du inte resettar den efter att den gjort sin callback. Då kommer den inte fortsätta fler gånger. Så svaret är troligen, nollställ den i din subrutin så den startar om. Här är ett exempel (i vb.net dock) som fungerar. Tjänsten har ett intervall på 100000 och kollar efter ett datum vilkor. Om vilkoret är sant gör tjänsten det som den ska. Vet inte om det hjälper dig. Tack Pelle det funka, så här blev det till slut:Timer i en tjänst
Timer timer = new System.Threading.Timer(new TimerCallback(Tick), null, 3000, 10000);
Thread.Sleep(0);
och för att fånga upp timern:
static void Tick(object state)
{
MakeBookings();
}
Timern utför det den ska en gång men sen verkar det som att den stannar, vad gör jag för fel?Sv: Timer i en tjänst
Sv: Timer i en tjänst
<code>
Protected Overrides Sub OnStart(ByVal args() As String)
' Add code here to start your service. This method should set things
' in motion so your service can do its work.
EventLog1.WriteEntry("Servicen Startade")
Timer1.Interval = 100000
Timer1.Start()
End Sub
Protected Overrides Sub OnStop()
' Add code here to perform any tear-down necessary to stop your service.
EventLog1.WriteEntry("In OnStop.")
End Sub
Private Sub Timer1_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed
If Now.DayOfWeek = DayOfWeek.Thursday Then And Not (LastRunDate.Year = Now.Year And LastRunDate.Month = Now.Month And LastRunDate.Day = Now.Day) And TimeString = "16:00" Then
Dim i As Integer
For i = 0 To 3
fetchDbData(i) 'En sub som lagrar databas värden i en text fil. Dock inte med här.
Next
LastRunDate = Now()
End If
End SubSv:Timer i en tjänst
// Här startas timern
AutoResetEvent ev = new AutoResetEvent(false);
System.Threading.Timer timer = new System.Threading.Timer(new TimerCallback(Tick), ev, 1000, 30000);
ev.WaitOne();
// Här är callback till timern
static void Tick(object state)
{
MakeBookings();
((AutoResetEvent) state).Set();
Thread.Sleep(1000);
((AutoResetEvent) state).Set();
}