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(ByVal ar As IAsyncResult)
Dim BytesRead As Integer
Dim Data As String
Try
SyncLock client.GetStream
BytesRead = client.GetStream.EndRead(ar)
End SyncLock
Data = Encoding.ASCII.GetString(readBuffer, 0, BytesRead)
Data = VisakPrimljenogStringa & Data
VisakPrimljenogStringa = ""
If Data.Substring(Data.Length - 1) = "|" Then
Data = Mid(Data, 1, Data.Length - 1)
Else
VisakPrimljenogStringa =
Data.Substring(Data.LastIndexOf("|") + 1)
Data = Data.Substring(0, Data.LastIndexOf("|"))
End If
Dim NizXMLova() As String
NizXMLova = Data.Split("|")
Dim i As Integer
'Dim sms(NizXMLova.Length - 1) As core.SMSPoruka
Try
For i = 0 To NizXMLova.GetUpperBound(0)
Dim sms As core.SMSPoruka
sms = core.SMSPoruka.FromXMLstring(NizXMLova(i))
Dim objniti1 As clsNiti
'Option 1 - Fast, but not safe
objniti1 = New clsNiti(sms, _AjDiOperatera)
ThreadPool.QueueUserWorkItem(New
WaitCallback(AddressOf objniti1.ObradaPoruke))
'Option 2 - Safe, but to slow, and MAXthread=20
Dim NovaNit1 As New MethodInvoker(AddressOf
objniti1.ObradaPoruke)
NovaNit1.DynamicInvoke()
Next i
Catch ex As Exception
End Try
SyncLock client.GetStream
client.GetStream.BeginRead(readBuffer, 0,
READ_BUFFER_SIZE, AddressOf nestostiglo, Nothing)
End SyncLock
Catch e As Exception
End Try
End Sub
Thanks,
Jovo
*** Sent via Developersdex
http://www.developersdex.com ***