PDA

View Full Version : از کار افتادن خود به خود تایمر ترد !!!!!!!



goldpower
سه شنبه 19 شهریور 1392, 10:33 صبح
این یک برنامه خیلی ساده چند خطی است. که کارش هم شمارشه .

حالا من از Threading.Timer استفاده کردم . ولی نمی دونم چرا بعد از چند ثانیه شمارش یدفعه توقف می کنه؟؟؟


Public Class Form1

Dim counter As Integer

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
CheckForIllegalCrossThreadCalls = False
Dim t As New Threading.Timer(New Threading.TimerCallback(AddressOf work), Nothing, 0, 5)
End Sub

Private Sub work()

Dim s As Integer = Rnd() * 1000
TextBox1.Text = s

If (s > 50) Then
counter = counter + 1
Label10.Text = counter
End If

End Sub
End Class

مهرداد صفا
سه شنبه 19 شهریور 1392, 19:48 عصر
با سلام.
شی t به دلیل اینکه در یک روال تعریف شده بعد از پایان آن توسط GC حذف می شود.
فقط این خط را درون کلاس (و نه داخل تابع خاصی) تعریف کنید:


Dim t As New Threading.Timer(New Threading.TimerCallback(AddressOf work), Nothing, 0, 5)

goldpower
سه شنبه 19 شهریور 1392, 21:21 عصر
مشکل حل شد:


Public Class Form1

Private t As Threading.Timer

Dim counter As Integer

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
CheckForIllegalCrossThreadCalls = False
Me.t = New Threading.Timer(New Threading.TimerCallback(AddressOf work), Nothing, 0, 5)
End Sub

Private Sub work()

Dim s As Integer = Rnd() * 1000
TextBox1.Text = s

If (s > 50) Then
counter = counter + 1
Label10.Text = counter
End If

End Sub
End Class