PDA

View Full Version : سوال: دسترسی thread ها به اشیاء فرم



MohsenTi
دوشنبه 04 آبان 1388, 18:54 عصر
سلام من یه فرم دارم که یه thread رو اجرا می کنه

Server = New Threading.Thread(AddressOf Ser)
Server.Start()
حالا در تابعی که این thread اجرا می کنه کد زیرو نوشتم

Public Sub Ser()
Dim Line As String
While Sock.Connected
Line = sr.ReadLine()
If (Line <> "") Then
Me.List1.Items.Add(Line) Else
Exit While
End If
End While
End Sub
مشکل اینه که به List1 که یک لستباکس در فرم اصلیه خطا می ده
و میگه یه thread نمی تونه به اشیاء سازندش دسترسی داشته باشه .
چه راه حلی پیش نهاد می دید که بتونم به لیستباکس دسترسی داشته باشم ؟

reza1944
دوشنبه 04 آبان 1388, 20:19 عصر
از اين سوال خوشم مياد چون (البته جسارت نشه مبتدي ها جوابش رو نميدونن



Delegate Sub SetTextCallback(ByVal [text] As String)

Private Sub SetText(ByVal [text] As String)
If Me.textBox1.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SetText)
Me.Invoke(d, New Object() {[text]})
Else
Me.textBox1.Text = [text]
End If
End Sub

Private Sub ThreadProcSafe()
Me.SetText("This text was set safely.")
End Sub

Private Sub setTextSafeBtn_Click( _
ByVal sender As Object, _
ByVal e As EventArgs) Handles setTextSafeBtn.Click
Me.demoThread = New Thread( _
New ThreadStart(AddressOf Me.ThreadProcSafe))
Me.demoThread.Start()
End Sub


اين روش مقدار دهي به اشياء از طريق thread رو ميده

سوالي داشتي تا قبل 18 برج خبرم كن

alireza_s_84
دوشنبه 04 آبان 1388, 21:35 عصر
سلام دوست عزیز:
علت اینکه یک ،Thread نمیتونه به کنترلهای فرم دسترسی داشته باشه برای اینه که در یک ریسمان جداگانه اجرا میشن (خوب مشخصه) به این حالات میگن ایمنی ریسمانThread Safe »
برای اینکه بتونید به کنترلهای فرم دسترسی داشته باشید و اونها رو به روز کنید باید از یک امضا (Delegate
استفاده کنید و با نمونه سازی از اون کار مورد نظرتون رو انجام بدین.
ضمنا مثالی که دوستمون زده هم کار میده اما حرفه ای تر اینه که از امضاها استفاده کنید


از اين سوال خوشم مياد چون (البته جسارت نشه مبتدي ها جوابش رو نميدونن

من هم از این طرز بیان اصلا خوشم نمیاد.
موفق باشید

MohsenTi
دوشنبه 04 آبان 1388, 23:04 عصر
از اين سوال خوشم مياد چون (البته جسارت نشه مبتدي ها جوابش رو نميدونن
البته حق با دوستمونه من برای اولین باره دارم در .net از thread استفاده می کنم !
در دلفی یکم اوضا فرق میکنه و دسترسی راحتره .