مشاهده نسخه کامل
: backgroundWorker
aliaghaaaaa
04-03-2012, 18:12
سلام.
خسته نباشید
می خواستم بدونم backgroundWorker چیه و چکار میکنه و چه مواقعی باید ازش استفاده کنیم.
و اگه ممکنه یه مثال برام بنویسید.
ممنون.:10:
یک برنامه ساده زمانی که اجرا می شود یک ریسمان(Thread) اصلی درون پروسس خود دارد که در واقع انجام دهنده اصلی برنامه نوشته شده است. در توضیح بیشتر می توان گفت که:
1- شما برای انجام کارهایتان به یک شرکت خدماتی زنگ زده اید -> پروسس
2-آن شرکت برای شما یک کارگر می فرستد -> Thread
3-کارگر وسایل شما را جا به جا می کند. -> اجرای کد ها
حال اگر بخواهیم در حین جابه جایی یخچال ، لباسشویی را نیز جابه جا کنیم چه می شود؟ کار جابه جایی یخچال متوقف می شود.این کار اصلی بود که دیگر ادامه ندارد.
1-در اینجا لازم است یک کارگر دیگر به صورت موقت به ما اضافه شود.(غیر از خودمون ! :31: ) ، (Another Thread)
2-این کارگر موقت است.(Other therad will be used as BackgroundWorker)
3-ما حواسمون به کار اصلی است اما باید بدانیم که لباسشویی جابه جا شده است یا نه.(Async works with finish and progress event)
حال هم یخچال توسط کارگر اصلی جابه جا شده هم لباسشویی توسط کارگر موقت!!!
نتایج:
1-هیچ عملی برای لحظه ای متوقف نشده.
2-ما وضعیت جابه جایی را می دانیم که الان لباسشویی کجاست.
3-می دانیم که لباسشویی با موفقیت جابه جا شده یا نه.
4-یخچال آماده می باشد.
خوب کارگر ها رو بفرستیم برن شب عیدی پیش خانواده شون باشن!!!!!!!!
در یک توضیح فنی:
1- اگر Main Thread مشغول باشد سرویس دهی به کاربر متوقف می شود و برنامه شبیه Not Responding می شود.
2-شما یک ProgressBar را با توجه به یک عمل می خواهید مقدار دهی کنید باید یک کارگر کد را اجرا کند و یک کارگر ProgressBar و عناصر رو سرویس دهد. کارگر اصلی سرویس دهنده و کارگر موقت در اینجا اجرا کننده کد برای ProgressBar می باشد. در این هنگام کارگر موقت گزارش کارش را پیوسته می دهد.....
اجزای فضای نام IO جز کندترین کلاس های .net هستند.یعنی شما می خواهید با دیسک یا پورت سریال کار کنید و.... اون هم به خاطر محدودیت سرعت این اداوات هستند. می توانید از BackgroundWorker استفاده کنید.
یا
شما در یک برنامه server/client یک در خواست به سرور می زنید، می خواهید تا سرور جواب بده کاربر الاف باشه این که نمیشه پس می تونید ازش استفاده کنید.
به این مثال دقت کنید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
من می خواهم از صفر تا 3200 رو یکی یکی جمع کنم و بفهمم کار چقدر جلو رفته بدون این که فرم اصلی کند شود.البته این مثال زیاد جالب نیست اما شما فرض کنید رو کلی اطلاعات می خواهید کار کنید.
در ابتدا یک نمونه از کلاس "پشت کار کارکن" می گیرم.
یک رویداد برای انجام اعمال تعریف می کنم.
یک رویداد برای گزارش روند کار تعریف می کنم.
یک رویداد پایان تعریف می کنم.
ویژگی گزارش دهی را نیز true میکنم.
در رویداد انجام ،یک گزارش با متد ReportProgress می دهم. سپس رویداد آن اجرا می شود.
در اتمام DoWork نیز رویداد پایانی که اضافه کردن 100 درصد هست اضافه می شود.
نکته: برای انجام اموری که از CPU و RAM زیاد استفاده می کند از این کلاس استفاده نکنید. چرا؟ شما حاضرید یک شرکت بزرگ را به یک کارگر موقت که معلوم نیست پدرش کیه مادرش کیه بسپارید؟ منظور از پدر و مادر : ThreadPool،Thread Priority ,Thread Safety و.... | در اینجا معمولا برنامه را MuliTask و یا MultiThread می نویسند.
امیدوارم منظور رو رسونده باشم.....
موفق باشید.
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.