afshin62
دوشنبه 15 خرداد 1391, 16:05 عصر
من تازه شروع کردم تا از TPL استفاده کنم و سرعت اجرا رو بالا ببرم.
برای این کار دو تا task ساختم که بطور موازی بک متد رو که حدودا 4 دقیقه طول میکشه با پارامترهای مختلف اجرا کنه. برنامه درست کار می کنه و این قسمت مشکلی نداره.
مشکل فریز شدن فرم اصلی هست. من قبل از این از doevents برای حل این مشکل استفاده می کردم و progressbar را هم update می کردم.
ولی حالا من نمی تونم progressbar رو از thread دیگه آپدیت کنم. یک کم سرچ کردم و دیدم دو تا راه حل پیشنهاد شده. یکی backgroundworker component که من چون دو تا task دارم نشد ازش استفاده کنم. یکی دیگه استفاده از delegate و invoke بود. کدی که من دارم استفاده می کنم و از متدم هر دفعه اجرا می کنم.
Private Delegate Sub ProgressDelegate(ByVal Cnt As long)
Sub progressBarUp(ByVal CntAs Long)
If Me.InvokeRequired Then
'Dim deleg As New ProgressDelegate(AddressOf progressBarUp)
Me.BeginInvoke(New ProgressDelegate(AddressOf progressBarUp), New Object() {Cnt})
Return
Else
Progress.Visible = True
Progress.Value = Cnt
End If
End Sub
من progressBarUp رو از درون متدی که داره بطور موازی روی task های مختلف اجرا میشه کال میکنم ولی هیج اتفاقی نمیفته.
حالا چجوری می تونم پیشرفت رو نشون بدم و هم فرمم فریز نشه.
با تشکر
برای این کار دو تا task ساختم که بطور موازی بک متد رو که حدودا 4 دقیقه طول میکشه با پارامترهای مختلف اجرا کنه. برنامه درست کار می کنه و این قسمت مشکلی نداره.
مشکل فریز شدن فرم اصلی هست. من قبل از این از doevents برای حل این مشکل استفاده می کردم و progressbar را هم update می کردم.
ولی حالا من نمی تونم progressbar رو از thread دیگه آپدیت کنم. یک کم سرچ کردم و دیدم دو تا راه حل پیشنهاد شده. یکی backgroundworker component که من چون دو تا task دارم نشد ازش استفاده کنم. یکی دیگه استفاده از delegate و invoke بود. کدی که من دارم استفاده می کنم و از متدم هر دفعه اجرا می کنم.
Private Delegate Sub ProgressDelegate(ByVal Cnt As long)
Sub progressBarUp(ByVal CntAs Long)
If Me.InvokeRequired Then
'Dim deleg As New ProgressDelegate(AddressOf progressBarUp)
Me.BeginInvoke(New ProgressDelegate(AddressOf progressBarUp), New Object() {Cnt})
Return
Else
Progress.Visible = True
Progress.Value = Cnt
End If
End Sub
من progressBarUp رو از درون متدی که داره بطور موازی روی task های مختلف اجرا میشه کال میکنم ولی هیج اتفاقی نمیفته.
حالا چجوری می تونم پیشرفت رو نشون بدم و هم فرمم فریز نشه.
با تشکر