• آموزش کار با BackgroundWorker
    #1
    Note 
    سلام این آموزش همراه با یک مثال انجام میشود.
    (توجه : در بهینه نبودن این مثال شک نداشته باشید چون فی البداهه و صرف آموزش نوشته شده است)

    مثال - میخواهیم تمامی فایلهای موجود در پوشه ی ویندوز را توسط یک thread پشت زمینه (مستقل از UI Thread) در یک لیست باکس نمایش دهیم.

    بلافاصله و بدون مقدمه؛ ابتدا یک آبجکت از نوع BackgroundWorker بسازید و در زمان کلیک شدن یک دکمه مقادیر آن را به شکل زیر تغییر دهید :
    کد php:
    BackgroundWorker worker = new BackgroundWorker();
     
    private 
    void button1_Click(object senderEventArgs e)
    {
        
    worker.WorkerReportsProgress true;
        
    worker.DoWork += new DoWorkEventHandler(worker_DoWork);
        
    worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged  );
        
    worker.RunWorkerAsync(new DirectoryInfo(@"C:\Windows"));


    خط آبی شده حاکی از آن است که worker میتواند در زمان اجرا میزان پیشرفت خود را گزارش کند(که باعث توانایی کار کردن با عناصر UI بصورت مستقیم و بدون استفاده از delegate میشود)
    سپس ایونت هندلرها رو تخصیص داده
    و در خط آخر نیز دستور اجرای آسنکرون اون رو با یک پارامتر ورودی را صادر کردیم.

    کار زمانبری که میخواهیم در پشت زمینه انجام شود را در رویداد DoWork مینویسیم و این همان رویدادی ست که با دستور worker.RunWorkerAsync در تیکه کد قبلی تحریک میشود :
    کد php:
    void worker_DoWork(object senderDoWorkEventArgs e)
    {
        
    DirectoryInfo primaryDir e.Argument as DirectoryInfo;
        
    int i 0;
        foreach (
    DirectoryInfo dir in primaryDir.GetDirectories())
        {
            foreach (
    FileInfo file in dir.GetFiles())
            {
                
    worker.ReportProgress(i++, file.FullName);
            }               
        }           


    همانطور که مشاهده کردید در خط اول متود بالا پارامتر ورودی را در قالب یک DirectoryInfo در آوردیم که بتوانیم از آن استفاده کنیم.
    و به ازای هر فایل شناخته شده (البته در عمل : بهتر است اینکار مثلا به ازای هر 100 فایل پیدا شده انجام شود) یک گزارش از میزان پیشرفت همراه با پارامترهای شماره فایل و نام آن میفرستیم.
    و در نهایت برای منعکس کردن پیشرفتهای لحظه ای و اختصاص آنها به لیست باکس مینویسیم:
    کد php:
    void worker_ProgressChanged(object senderProgressChangedEventArgs e)
    {
        
    listBox1.Items.Add(e.ProgressPercentage.ToString() + " : " e.UserState.ToString());


    توجه کنید که در کد بالا مقدار e.UserState همان آبجکتی است که در زمان DoWork ارسال کردید.

    منبع:barnamenevis.org

    پاسخ
    ایجاد موضوع جدید   پاسخ به موضوع  

    موضوعات مرتبط با این موضوع...
    موضوع نویسنده پاسخ بازدید آخرین ارسال
      سوال نوشتن برنامه ای برای گرفتن معدل دانش اموزان mansoureh 4 1,369 12-06-2015 ساعت 23:52
    آخرین ارسال: mansoureh
    Note کتاب آموزش Parse کردن یک خبر خوان وردپرسی برای ویندوزفون The Arrow 0 1,553 23-04-2015 ساعت 09:24
    آخرین ارسال: The Arrow
    Note کتاب آموزشی SQLite ویندوزفون The Arrow 1 1,458 07-12-2014 ساعت 09:59
    آخرین ارسال: Ali Developer
    Note فصل دوم آموزش برنامه نویسی ویندوزفون - ویرایش یکم The Arrow 2 686 09-10-2014 ساعت 12:51
    آخرین ارسال: rockstar
    Note فصل دوم آموزش برنامه نویسی ویندوزفون The Arrow 0 818 06-10-2014 ساعت 01:46
    آخرین ارسال: The Arrow
    Note آموزش کامل سی شارپ (ویدئو) xMAN 2 887 02-10-2014 ساعت 12:50
    آخرین ارسال: xMAN
    Note آموزش برنامه نویسی ویندوز فون به همراه کتاب الکترونیکی The Arrow 0 698 02-10-2014 ساعت 12:22
    آخرین ارسال: The Arrow
    Note کتاب آموزش قدم به قدم سی شارپ THE KNIGHT 0 506 27-01-2014 ساعت 19:28
    آخرین ارسال: THE KNIGHT
    Note آموزش سی شارپ - برعکس کردن یک آرایه xMAN 0 403 26-01-2014 ساعت 12:09
    آخرین ارسال: xMAN
    Note آموزش سی شارپ -ایجاد و تخصیص ToolTip در زمان اجرا xMAN 0 436 26-01-2014 ساعت 12:07
    آخرین ارسال: xMAN

    کاربرانِ درحال بازدید از این موضوع:   1 مهمان