ورود

View Full Version : کاربرد BackgroundWorker چیست ؟



milad.biroonvand
چهارشنبه 21 فروردین 1392, 22:36 عصر
سلام
کاربرد BackgroundWorker چیست ؟

erfan_urchin
پنج شنبه 22 فروردین 1392, 03:22 صبح
یکی از مهمترین فایده هاش اینه که اگه ما در برنامه ھا بخواھیم ھم کارھای محاسباتی سنگین و ھم حجم خود برنامه رو یکجا بر روی حافظه برنامه لود کنیم ، در نتیجه برنامه ھنگ میکنه و کاربر فکر می کنه برنامه خرابه و اشکال داره پس ما از back ground worker استفاده میکنیم

milad.biroonvand
پنج شنبه 22 فروردین 1392, 08:45 صبح
خیلی متشکرم ، اگر کسی تکه برنامه ای داره اینجا بزاره ، من یکی تو وب سایت code project دیدم ولی زیاد متوجه نشدم برا چی مناسبه

singel
پنج شنبه 22 فروردین 1392, 20:51 عصر
همانطور که دوست عزیزمان توضیح دادن ، برای جلوگیری از هنگ برنامه در زمانی که کار ها و محاسبات سنگین انجام می شود .
فقط کافیست کد های خود را در این قسمت بنویسد


Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
کد های شما
End Sub


برای اجرا هم کافیست از این کد استفاده کنید



BackgroundWorker1.RunWorkerAsync()

milad.biroonvand
پنج شنبه 22 فروردین 1392, 21:23 عصر
بله من ، یک نمونه توی وب سایت کد پروجکت دیدم ، فقط می خوام بدونم ، وقتی من یک دستور رو در قسمت BackgroundWorker1_DoWor می نویسم باعث میشه که یک دستور طی بازهای زمانی اجرا بشه ، خوب حالا سوال من اینه که چطور وقتی دستوری رو در این قسمت می نویسیم سیستم هنگ نمیکنه ، چه اتفاقی می افته؟

tooraj_azizi_1035
جمعه 23 فروردین 1392, 10:59 صبح
سلام
علت اینه که متد DoWork روی یک تردی غیر از ترد UI اچرا میشه. پس از اتمام رویداد RunWorkerCompleted رخ میده.
مثال این لینک رو ببین:http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

singel
جمعه 23 فروردین 1392, 12:46 عصر
دوست عزیز بهتره شما در مورد Thread یا همون " نخ " یک جستجو کنید تا بهتر متوجه بشید .
البته قبلا در این سایت بحث شده

milad.biroonvand
جمعه 23 فروردین 1392, 13:08 عصر
سلام

در مورد نخ ها بلدم . مر30

amirmms
جمعه 23 فروردین 1392, 15:17 عصر
سلام
من یه سری کد رو می خوام هر یک ثانیه یک بار اجرا بشه و این کدا یکم محاسبات سنگین داره و CPU زیادی مصرف میکنه
با این شی نشد.
میشه یکی کمک کنه ؟

singel
جمعه 23 فروردین 1392, 21:23 عصر
از یک تایمر و BackgroundWorker استفاده کنید
درBackgroundWorker کد هاتون را قرار بدید و در تایمر دستور اجرای BackgroundWorker

Timer1.Interval = 1000


Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick

BackgroundWorker1.RunWorkerAsync()
End Sub


اگر محاسباتتون سنگینه 1 ثانیه فکر نمیکنم زمان مناسبی باشه

amirmms
جمعه 23 فروردین 1392, 22:55 عصر
از یک تایمر و BackgroundWorker استفاده کنید
درBackgroundWorker کد هاتون را قرار بدید و در تایمر دستور اجرای BackgroundWorker

Timer1.Interval = 1000


Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick

BackgroundWorker1.RunWorkerAsync()
End Sub


اگر محاسباتتون سنگینه 1 ثانیه فکر نمیکنم زمان مناسبی باشه

همین کار رو کردم ولی اجرا نمیشه.
مقداری رو بر نمی گردونه توی تکست باکسام.

singel
جمعه 23 فروردین 1392, 23:25 عصر
مقدار دادن به تکست باکس


Delegate Sub UpdateTextBox_d(ByVal txt As String)
Public Sub update_textbox(ByVal txt As String)
TextBox1.Text = txt
End Sub





Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

Dim up_txt As UpdateTextBox_d = New UpdateTextBox_d(AddressOf update_textbox)
Me.Invoke(up_txt, "مقدار خروجی")

End Sub