Thread problemi di Hanldes

giovedì 10 maggio 2007 - 15.32

kueza Profilo | Newbie

Salve ragazzi ho bisgono del vostro aiuto, ho realizzato un servizio windows e per me è necessario utilizzare un thread STA perchè dovrò lavorare con un oggetto webBrowser...
Sul mio servizio ho messo un System.Timers.Timer e gli ho settato l'intervallo a 1 quindi allo scadere del tempo viene chiamata la routine Timer1_Elapsed e che chiama una sub sincronizzata "startRequestProcess" che crea un thread STA assegna la sub da chiamare e aspetta che l'esecuzione sia terminata in questo caso esce subito perchè la sub lanciaFormProcesso non fa nulla, se controllo il processo in esecuzione dopo aver registrato e startato il servizio vedo che gli handles aumentano di botto e quindi anche la memoria.

Come posso risolvere il mio problema ??
siete GRANDI !!

Imports system.Runtime.CompilerServices

Public Class Service1

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.
End Sub

Protected Overrides Sub OnStop()
' Add code here to perform any tear-down necessary to stop your service.
End Sub

Private Sub Timer1_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed

startRequestProcess()

End Sub

<MethodImpl(MethodImplOptions.Synchronized)> _
Public Sub startRequestProcess()

Dim T As New Threading.Thread(AddressOf lanciaFormProcesso)
T.SetApartmentState(Threading.ApartmentState.STA)
T.Start()
T.Join()

End Sub

Sub lanciaFormProcesso()
'Non faccio nulla
End Sub

End Class

alextyx Profilo | Expert

Così....al volo....prova a mettere un intervallo decoroso al tuo Timer. Mettere = 1, significa 1 millisecondo!!! Sai quanti eventi Timer elapsed rischi di accumulare, prima di arrivare a dirgli che non è più abilitato. Forse non è quelo il problema, ma un intervallo minore di 50 è un pio desiderio e un grosso problema!

kueza Profilo | Newbie

Ho provato a mettere 1000 ed anche 10000 è solo più lento ad aumentare, l'idea che mi sono fatto di questo problema e che non muore il thread che istanzio ogni volta , perchè rimane in piedi il delegato che lancia il thread...

alextyx Profilo | Expert

Scusa, ma da qualche parte, lo disabiliti il Timer?
Altrimenti continuerà a ripassare per la sua routine di evento elapsed. Dovresti disabilitarlo esattamente all'ingresso della routine, tanto a quel punto è già in procedura ed eseguirà anche tutte le righe seguenti.

kueza Profilo | Newbie

Cmq la sub che viene chiamata è sincronizzata e quindi i thread rimangono ad aspettare il loro turno ho provato anche cmq ad utilizzare timer.start. stop senza nessun risultato.

alextyx Profilo | Expert

Il fatto che aumentando l'intervallo del timer, la lentezza dell'incremento aumenti, continua a farmi presumere che c'entri il timer.
Mi fai vedere il codice con cui disabiliti il timer? Secondo me, devi farlo appena entri, per la prima volta, nella routine di gestione dell'evento elapsed. La prima riga! Se non è così, non capisco perchè debbano venire creati diversi thread (se ho ben capito).
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5