Hello,
I have a problem with thread safe in VB.NET 2005.
I'm calling DLL from EXE file, in separete thread.
That DLL must update some Tables in database.
When I using ThreadPool, i have problem because many thredas update same
Table and I have wrong results :(
When I using MethodInvoker everythong is OK, but maximum thread is 20
(not enough for my projet)
So.. the solution is make ThreadPool safe, or change maximum nuber of
threads when using MethodInvoker, or something else...?
Code:
Private Sub BufferRead(ByVa l ar As IAsyncResult)
Dim BytesRead As Integer
Dim Data As String
Try
SyncLock client.GetStrea m
BytesRead = client.GetStrea m.EndRead(ar)
End SyncLock
Data = Encoding.ASCII. GetString(readB uffer, 0, BytesRead)
Data = VisakPrimljenog Stringa & Data
VisakPrimljenog Stringa = ""
If Data.Substring( Data.Length - 1) = "|" Then
Data = Mid(Data, 1, Data.Length - 1)
Else
VisakPrimljenog Stringa =
Data.Substring( Data.LastIndexO f("|") + 1)
Data = Data.Substring( 0, Data.LastIndexO f("|"))
End If
Dim NizXMLova() As String
NizXMLova = Data.Split("|")
Dim i As Integer
'Dim sms(NizXMLova.L ength - 1) As core.SMSPoruka
Try
For i = 0 To NizXMLova.GetUp perBound(0)
Dim sms As core.SMSPoruka
sms = core.SMSPoruka. FromXMLstring(N izXMLova(i))
Dim objniti1 As clsNiti
'Option 1 - Fast, but not safe
objniti1 = New clsNiti(sms, _AjDiOperatera)
ThreadPool.Queu eUserWorkItem(N ew
WaitCallback(Ad dressOf objniti1.Obrada Poruke))
'Option 2 - Safe, but to slow, and MAXthread=20
Dim NovaNit1 As New MethodInvoker(A ddressOf
objniti1.Obrada Poruke)
NovaNit1.Dynami cInvoke()
Next i
Catch ex As Exception
End Try
SyncLock client.GetStrea m
client.GetStrea m.BeginRead(rea dBuffer, 0,
READ_BUFFER_SIZ E, AddressOf nestostiglo, Nothing)
End SyncLock
Catch e As Exception
End Try
End Sub
Thanks,
Jovo
*** Sent via Developersdex
http://www.developersdex.com ***