Handles impazziti!!

sabato 15 dicembre 2007 - 14.12

kueza Profilo | Newbie

Ciao ragazzi datemi una mano vi preg sto impazzendo ....

Sto realizzando un servizio windows che naviga alcune pagine web, quindi ogni 10 secondi il timer scatta ed io istanzio un nuovo thread di tipo ApartmentState.STA che avvia l'esecuzione della mia classe, questa classe inizia con il metodo sincronizzato "IniziaElaborazione" qui dentro instanzia un oggetto webBrowser e comincia a navigare, in tutto dovrà navigare tre pagine senza uscire dal metodo, infatto con un ciclo rimango in attesa finchè il WB non ha navigato tutte e tre le pagine.

Tutto funziona regolarmente i thread lavorano in maniera sincronizzata esce uno entra l'altro il problema vero e proprio è di memoria, se vado a controllare sul task manager e visualizzo gli handles, vedo che aumentano e non diminuiscono mai, in teoria ci dovrebbe pensare il garbagecoll ma non sembra funzionare, ho provato anche a forzarlo ma niente da fare aumentano lo stesso e di conseguenza anche la memoria.

Provo a lasciarlo accesso tutta la notte per vedere se magari si fermano ma non sono fiducioso penso più che ho sbagliato qualcosa nel codice scritto, qui sotto ci sono le classi, ma se volete di piu vi spedisco via email il piccolo progettino, spero tanto che mi aiutate.
ciao e grazie



Public Class Service1


Private m_SessionWEB As SessionWeb
Private m_ContoThread As Integer

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.

m_SessionWEB = New SessionWeb

' Timer1.Enabled = True
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 System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed


Debug.WriteLine("IL TIMER E' SCATTATO")
m_ContoThread = m_ContoThread + 1
Dim m_sessionStart As Threading.Thread
m_sessionStart = New Threading.Thread(AddressOf NewSessionRSAWeb)
m_sessionStart.SetApartmentState(Threading.ApartmentState.STA)
m_sessionStart.Name = "TNum:" + m_ContoThread.ToString
Debug.WriteLine("E' partito il thread NUMERO:" + m_ContoThread.ToString)
m_sessionStart.Start()


End Sub

Public Sub NewSessionRSAWeb()
m_SessionWEB.IniziaElaborazione()
End Sub






End Class



Imports System.Windows.Forms

Public Class SessionWeb

Private Shared session As String = "Elaboro"
Private m_fine As Boolean
Private WithEvents WB As WebBrowser
Private countStep As Integer
Private sito As String = "http://www1.directatrading.com/"

Public Sub IniziaElaborazione()

SyncLock (session)
countStep = 1
m_fine = False

If WB Is Nothing Then
WB = New WebBrowser
End If

WB.Navigate(sito)

Do Until m_fine

Application.DoEvents()

Loop

WB.Dispose()
WB = Nothing
End SyncLock
End Sub



Private Sub WB_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WB.DocumentCompleted


Select Case countStep

Case 1
Debug.WriteLine("Thread: " + Threading.Thread.CurrentThread.Name + " Navigo 1")
WB.Navigate(sito)
countStep = 2
Case 2
Debug.WriteLine("Thread: " + Threading.Thread.CurrentThread.Name + " Navigo 2")
WB.Navigate(sito)
countStep = 3
Case 3
m_fine = True


End Select



End Sub



End Class
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5