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
Handles impazziti!!
sabato 15 dicembre 2007 - 14.12
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
kueza
Profilo
| Newbie
18
messaggi | Data Invio:
sab 15 dic 2007 - 14:12
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
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 !