نمایش نتایج 1 تا 1 از 1

نام تاپیک: آشنایی با کامپوننت BackgroundWorker

  1. #1

    آشنایی با کامپوننت BackgroundWorker

    سلام

    در این تاپیک می خوام با کامپوننت BackgroundWorker برنامه نویس های عزیز رو آشنا کنم.

    نگاهی کلی بر کامپوننت BackgroundWorker

    عملیات رایج بسیاری وجود دارند که می توانند زمان زیادی برای اجرا مصرف کنند. برای مثال:


    • دانلود عکس ها
    • فراخوانی یک Web Service
    • دانلود و آپلود فایل ها
    • محاسبات محلی پیچیده
    • Database transactions
    • دستیابی محلی به دیسک، به خاطر سرعت پایینش نسبت به حافظه اصلی

    عملیاتی از این دست می توانند باعث شوند تا واسط کاربری شما در هنگامی که این عملیات در حال اجرایند به حالت تعلیق در بیایند.

    زمانی که شما یک UI پاسخگو نیاز دارید و با تاخیرهای طولانی در اجرای این عملیات مواجه هستید BackgroundWorker راه حل مناسبی برای رفع این مشکل فراهم می آورد.

    BackgroundWorker به شما امکان می دهد تا عملیات زمان بر را ناهمگام (asynchronously ) (یعنی در پس زمینه) روی نخی به جز نخ UI اصلی برنامه تان اجرا کنید .

    برای استفاده از BackgroundWorker شما به سادگی به این کامپوننت متد زمان بر را برای اجرا در پس زمینه به معرفی می کنید و سپس متد RunWorkerAsync را صدا می زنید.
    نخی را که از داخل آن متد RunWorkerAsync صدا زده می شود به شکل نرمال اجرایش ادامه پیدا می کند در حالی که متد کارگر (Worker) همزمان به شکل ناهمگام اجرا می شود. هنگامی که متد کارش را تمام می کند BackgroundWorker به نخ فراخواننده با Fire کردن رویداد RunWorkerCompleted اتمام کار را گزارش می دهد که به شکل اختیاری حاوی نتایج عملیات است.
    کامپوننت BackgroundWorker در تب Components جعبه ابزار می باشد. برای افزودن BackgroundWorker به فرمتان یک کامپوننت BackgroundWorker به فرمتان درگ کنید. BackgroundWorker در Component Tray قرار می گیرد و خصوصیاتش در پنجره Properties نمایش داده می شود.

    برای شروع عملیات ناهمگامتان از متد RunWorkerAsync استفاده کنید. RunWorkerAsync به شکل اختیاری یک پارامتر از نوع object می گیرد که می تواند برای ارسال آرگومان ها به Worker thread شما ارسال شود. کلاس BackgroundWorker رویداد DoWork را در معرض استفاده قرار می دهد که Worker thread شما به آن از طریق یک DoWork Event Handler می پیوندد.


    DoWork event handler پارامتری از نوع DoWorkEventArgs می گیرد که دارای خاصیتی به نام Argument است. این خاصیت پارامتر را از RunWorkerAsync دریافت می کند و می تواند به متد کارگر شما که در DoWork event handler صدا شده خواهد شد ارسال شود. مثال زیر نشان می دهد که چطور یک نتیجه از یک متد کارگر به نام ComputeFibonacci را می توان انتساب داد.


    // This event handler is where the actual,
    // potentially time-consuming work is done.
    private void backgroundWorker1_DoWork(object sender,
    DoWorkEventArgs e)
    {
    // Get the BackgroundWorker that raised this event.
    BackgroundWorker worker = sender as BackgroundWorker;

    // Assign the result of the computation
    // to the Result property of the DoWorkEventArgs
    // object. This is will be available to the
    // RunWorkerCompleted eventhandler.
    e.Result = ComputeFibonacci((int)e.Argument, worker, e);
    }


    این کد بخشی از یک مثال بزرگ است که می توانید در اینجا نمونه کاملش را مشاهده کنید.
    آخرین ویرایش به وسیله tooraj_azizi_1035 : جمعه 26 خرداد 1391 در 19:37 عصر

تاپیک های مشابه

  1. سوال: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker
    نوشته شده توسط alireza_tavakol در بخش C#‎‎
    پاسخ: 9
    آخرین پست: جمعه 02 اسفند 1387, 00:46 صبح
  2. دريافت خطا در هنگام نصب کامپوننت
    نوشته شده توسط شیما.م در بخش کامپوننت های سایر شرکت ها، و توسعه کامپوننت
    پاسخ: 6
    آخرین پست: دوشنبه 09 خرداد 1384, 18:43 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •