بررسی BackgroundWorker در سی شارپ

برسی BackgroundWorker

در این مقاله به سراغ بررسی BackgroundWorker رفتیم.برای اینکه کاری کنید که BackgroundWorker برای شما مفید باشد، و چگونگی گرفتن results back (ما از List<int> به عنوان returndata استفاده می کنیم)، رد کردن پارامتر ها به BackgroundWorker، ادامه دادن مسیر پیشرفت و لغو کردن روند پردازش پس زمینه در زمان اجرا. در نهایت به جای منتظر ماندن برای انجام شدن محاسبات، ما روش جمع آوری نتایج BackgroundWorker “on the fly” را به شما آموزش خواهیم داد.
دلیل استفاده از BackgroundWorker؟
می توانید از آن برای تغییر بعضی از محاسبات بسیار سنگین استفاده کنید، به طور مثال: دسترسی به پایگاه داده (دیتابیس) و یا جستوجوی یک فایل، و یا بهتر ساختن رابط کاربری آن. اگر UI و محاسبات سنگین هر دو در یک رشته (thread) اجرا شوند، UI کند و دچار مشکل میشود (هنگ می کند)، و کاربر فکر می کند که برنامه crash (هنگ) شده است.
نحوه استفاده از BackgroundWorker
ممکن است که BackgroundWorker کمی ترسناک به نظر برسد، اما در واقع بسار ساده می باشد و در صورتی که نیاز داشتید کلاس BackgroundWorker در MSDN را برسی کنید، می توانید آن را در namespace System.ComponentModel پیدا کنید.
اولین کاری که باید انجام دهید این است که BackgroundWorker را به اپلیکیشن اضافه کنید و آسان ترین روش برای این کار کشیدن (drag کردن) آن از جعبه ابزار (toolbox) به فرم خود می باشد، که در زیر تب components قرار دارد. سپس خواهید دید که BackgroundWorker به عنوان BackgroundWorker1 در جعبه خاکستری رنگ زیر فرم شما مشخص می شود.

بررسی BackgroundWorker

.در این کامپوننت به صورت رویداد محوری (event-driven) می باشد، بنابراین برای یاد گرفتن اصول اولیه کار با آن لازم است موارد زیر را انجام دهید.

  • DoWorkهای BackgroundWorker’sرا از اپلیکیشن خود فرا خوانی (Invoke) کنید.
  • به DoWork وظایفی را محول کنید که با روش اضافه کردن کد به BackgroundWorker1.DoWork آن را انجام دهد.
  • بعد از این که کد های DoWork کامل شد، رویداد RunWorkerCompleted فراخوانده می شود.
  • از طریق متود RunWorkerCompleted، مقادیر ارائه شده خود را بازیابی می کنیم.

روی DoWork کلیک راست کرده و آن را اضافه کنید:

بررسی BackgroundWorker

و حالا برای RunWorkerCompleted:

بررسی BackgroundWorker

در نهایت یک دکمه ایجاد کنید، متن آن را به شروع (Start) تغییر دهید و کد زیر را به Button.Click اضافه کنید.

بررسی BackgroundWorker

نحوه منتقل کردن یک بحث یا مناظره (argument ) به BackgroundWorker
خیلی راحت، سعی کنید time و   thread sleeps را به عنوان یک مبحث اضافه کنید. در مرحله اول روش فراخوانی DoWork را تغییر دهید.

بررسی BackgroundWorker

و سپس با تغییر دادن کد، از آن مبحث در BackgroundWorker خود استفاده کنید.

بررسی BackgroundWorker

نحوه لغو کردن BackgroundWorker به صورت نصفه کاره
ابتدا ویژگی WorkerSupportsCancellation را در پنجره property به حالت true تغییر دهید. سپس یک دکمه با عنوان لغو (Cancel) اضافه کنید:

بررسی BackgroundWorker

حالا باید برسی کنید که BackgroundWorker دستور متوقف کردن (stop) را گرفته است یا خیر.

بررسی BackgroundWorker

حالا اگر روی لغو (cancel) کلیک کنید، با مشکل روبرو می شوید، هم چنین باید RunWorkerCompleted را تغییر دهیم که عملیات لغو کردن (cancellations) را برسی کند.

بررسی BackgroundWorker

نحوه کار با WorkerReportsProgress
ابتدا WorkerReportsProgress را به حالت true تنظیم کنید. سپس DoWork را به صورت زیر تغییر دهید:

بررسی BackgroundWorker

حالا یک ProgressBar (نوار پیشرفت) جدید بسازید، و سپس روی BackgroundWorker’s ProgressChangedevent دوبار کلیک کنید و کد زیررا اضافه کنید:

بررسی BackgroundWorker

استفاده های دیگر از WorkerReportsProgress
می توانید به جای محسابه ی همه اطلاعات، و انتقال آن (همان گونه که انجام دادیم)، به آن اطلاعات اضافه کنید. برای این کار باید از پارامتر Userstate استفاده کنید، که با استفاده از آن می توانید object ها را بازگردانید و سپس در رویداد ProgressChanged، آن را در یک نوع مناسب تعیین کنید.

  • پسورد: www.mspsoft.com
داریوش فرخی

داریوش فرخی هستم از سال 92 شروع به یادگیری برنامه نویسی و از سال 93 در بخش برنامه نویسی و تولید محتوای سایت mspsoft.com مشغول هستم. فعالیتم نیز بیشتر در زمینه های برنامه نویسی با سی شارپ و asp.net بوده است. اوقات فراغتم را هم غالبا با تماشای فیلم یا بازی های کامپیوتری پر میکنم .

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.