Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Thread problemi di Hanldes
giovedì 10 maggio 2007 - 15.32
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
kueza
Profilo
| Newbie
18
messaggi | Data Invio:
gio 10 mag 2007 - 15:32
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
668
messaggi | Data Invio:
gio 10 mag 2007 - 16:04
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
18
messaggi | Data Invio:
gio 10 mag 2007 - 16:10
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
668
messaggi | Data Invio:
gio 10 mag 2007 - 17:34
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
18
messaggi | Data Invio:
ven 11 mag 2007 - 08:20
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
668
messaggi | Data Invio:
ven 11 mag 2007 - 08:34
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).
Torna su
Stanze Forum
Elenco Threads
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 !