تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 7 از 7

نام تاپيک: مختصری درباره BackgroundWorker

  1. #1
    Banned B O L O T's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    (∞-∞)
    پست ها
    2,073

    پيش فرض مختصری درباره BackgroundWorker

    BackgroundWorker محسوس تر و بصری تر کردن کلاس thread است.یک پروسه زمان بر را به آن میدهیم و BackgroundWorker آن را اصطلاحا در پشت (رابط کاربری و کاربر شما) تا پایان انجام میدهد در حالی که کاربر میتواند در طول این مدت پروسهای دیگر خود را انجام دهد.

    BackgroundWorker1.RunWorkerAsync(100): این متد رویداد DoWork را صدا میزند پارامتر آن اختیاری و از نوع object است که در رویداد DoWork توسط متد e.Argument قابل بازیابی است.


    BackgroundWorker1.DoWork: کدهای مربوط به پروسه خود را (مثل لود تعداد زیادی رکورد) در این رویداد قراردهید.


    BackgroundWorker1.RunWorkerCompleted: وقتی کل پروسه پایان پذیرفت این رویداد صدا زده میشود.

    backgroundWorker1.IsBusy: مادامیکه پروسه در حال انجام است و رویداد RunWorkerCompleted صدا زده نشده این خصوصیت مقدار True دارد


    BackgroundWorker.ReportProgress(int32): برای استفاده از این متد ابتدا خصوصیت WorkerReportsProgress رابرابر true قراردهید.
    این متد رویداد BackgroundWorker.ProgressChanged را صدا میزند و پارامتر خود را در متد e. ProgressPercentage رویداد فوق تحویل میدهد.


    BackgroundWorker.ProgressChanged: به راحتی میتوانید در این رویداد پروگرس بار خود را مقداردهی کنید. و کاربر را از روند کار آگاه کنید.


    BackgroundWorker.CancelAsync: برای استفاده از این متد ابتدا خصوصیت WorkerSupportsCancellation رابرابر true قراردهید.
    این متد باعث کنسل شدن کل پروسه میشود. و خصوصیت BackgroundWorker.CancellationPending را True میکند البته مشخص است که خروجی پروسه تا فراخوانی این متد در اختیار کاربر است.


    BackgroundWorker.CancellationPending: بهتر است در طول پروسه مقدار این خصوصیت مرتبا چک شود.

  2. #2
    داره خودمونی میشه Shahrdar's Avatar
    تاريخ عضويت
    Aug 2004
    پست ها
    185

    پيش فرض

    سلام
    ممنون از آموزشه خوبت

    من يه مشکل دارم تويه cancel کردن من اينکارو به سرته زير انجام ميدم
    (اينم بگم که workersupportscancellation = true هست)

    برايه شروع

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    برايه cancel کردن

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    ولی جواب هميشه true ميشه

    اگه کمک کنی ممنون ميشم

  3. #3
    آخر فروم باز hamidreza_buddy's Avatar
    تاريخ عضويت
    Sep 2004
    محل سكونت
    شریف
    پست ها
    1,167

    پيش فرض

    باید توی پروسه ای که در حال اجرا هست چک کنی که آیا bakground.CancellationPending مقدارش true شده یا نه.
    چون بعد از اجرای CancelWork() این مقدار true می شود و ما باید پروسه مان را به پایان برسانیم. مخصوصاً اگر پروسمون یک حلقۀ بینهایت داشته باشه. وگرنه تا آخر اجرا میشه و هیچ راهی برای متوقف کردنش نیست.

    در ضمن یه چیز جالب هم در این باره تغییر مشخصات فرم (یا در کل داده های یک ریسمان دیگر) هست. چون این دو در دو ریسمان متفاوت هستند این کار به صورت مستقیم امکان پذیر نیست. مثلاً برای تغییر اندازۀ فرم (Size) اگر به صورت مستقیم در پروسه عمل کنیم یک Exception رخ می دهد.

    برای مثال من خودم می بایست در این متد ScrollSize یک فرم رو تغییر می دادم. ولی اگه مستقیم می نوشتم که مثل
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    یک exception رخ می داد.
    برای حل این مشکل باید این کارو می کردم:
    ابتدا یک delegate ایجاد کنم:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    بعد توی فرمم یک عضو از این نوع ساختم:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    بعد اونو تو سازنده مقداردهی کردن:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    و تابعی با این نام در فرم ایجاد کردم:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    حال هر وقت نیاز به تغییر دادن ScrollSize فرم در پروسه بود اینگونه عمل می کردیم:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    آخیش تموم شد!

  4. #4
    Banned B O L O T's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    (∞-∞)
    پست ها
    2,073

    پيش فرض

    ممنون کارت عالیه .

  5. #5
    در آغاز فعالیت
    تاريخ عضويت
    Oct 2005
    پست ها
    10

    پيش فرض salam

    سلام خيلي ممنون از پستتون
    ميخواستم بدونم چه طور ميشه مقداري رو كه از انجام يك پروسه در backgroundworker بدست آورديم به يك textbox در همون فرم منتقل كنيم
    با تشكر

  6. #6
    در آغاز فعالیت lahij.ir's Avatar
    تاريخ عضويت
    Aug 2007
    محل سكونت
    لاهیجان
    پست ها
    13

    پيش فرض

    سلام خيلي ممنون از پستتون
    ميخواستم بدونم چه طور ميشه مقداري رو كه از انجام يك پروسه در backgroundworker بدست آورديم به يك textbox در همون فرم منتقل كنيم
    با تشكر
    سلام سوال منم همینه ، مستقیم نمیتونم یه مقدار بدم به شی روی فرمم چی کار کنم ؟

  7. #7
    اگه نباشه جاش خالی می مونه without_all's Avatar
    تاريخ عضويت
    Jun 2007
    پست ها
    315

    11

    سلام سوال منم همینه ، مستقیم نمیتونم یه مقدار بدم به شی روی فرمم چی کار کنم ؟
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    تابع به رنگ آبی رو داخل backgroundWorker1_DoWork فراخانی میکنید .

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •