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

نام تاپیک: مشکل با backgroundWorker

  1. #1
    کاربر دائمی آواتار hamid67fathi
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    WwW
    پست
    435

    مشکل با backgroundWorker

    سلام
    من با استفاده از backgroundworker يه ديتا تيبل سنگين رو پر ميکنم.
    اما نميتونم موقعيت cancel بودن رو چک کنم .
    کسی راه حلی داره ؟

  2. #2
    VIP آواتار Sajjad.Aghapour
    تاریخ عضویت
    مهر 1386
    محل زندگی
    اهل کاشانم .. روزگارم بد نیست
    پست
    1,265

    نقل قول: مشکل با backgroundWorker

    می تونید از خاصیت BGWorker.CancellationPending استفاده کنید....
    Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."

  3. #3
    کاربر دائمی آواتار hamid67fathi
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    WwW
    پست
    435

    نقل قول: مشکل با backgroundWorker

    سلام
    اين مورد در صورتی پاسخ گو هست که ترد مشغول نباشه و هر لحظه امکان چک کردن اين ويژگی وجود داشته باشه.
    اما زمانی که ديتا تيبل در حال پر شدن هست اين امکان وجود نداره.

  4. #4
    VIP آواتار Sajjad.Aghapour
    تاریخ عضویت
    مهر 1386
    محل زندگی
    اهل کاشانم .. روزگارم بد نیست
    پست
    1,265

    نقل قول: مشکل با backgroundWorker

    خوب بله.اصولا شرط IsBusy هم چک میشه...

    if(BGWorker.IsBusy)
    {
    BGWorker.CancelAsync();
    this.Text="cancelling operation....";
    }
    Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."

  5. #5
    کاربر دائمی آواتار hamid67fathi
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    WwW
    پست
    435

    نقل قول: مشکل با backgroundWorker

    سلام
    امکانش هست يک مثال بزنيد ؟
    من امتحان کردم ولی جوابی نگرفتم .

  6. #6
    VIP آواتار Sajjad.Aghapour
    تاریخ عضویت
    مهر 1386
    محل زندگی
    اهل کاشانم .. روزگارم بد نیست
    پست
    1,265

    نقل قول: مشکل با backgroundWorker


    private void button_Click(object sender, EventArgs e)
    {
    if (bgWorker.IsBusy)
    bgWorker.CancelAsync();
    }

    //

    private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
    {
    if (bgWorker.CancellationPending)
    {
    e.Cancel = true;
    return;
    }
    }

    //

    private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
    if (e.Cancelled)
    this.Text = "cancelled";
    }
    Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."

  7. #7
    کاربر دائمی آواتار hamid67fathi
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    WwW
    پست
    435

    نقل قول: مشکل با backgroundWorker

    نقل قول نوشته شده توسط sajjadlove مشاهده تاپیک

    private void button_Click(object sender, EventArgs e)
    {
    if (bgWorker.IsBusy)
    bgWorker.CancelAsync();
    }

    //

    private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
    {
    // اينجا ديتا تيبل پر شود
    if (bgWorker.CancellationPending)
    {
    e.Cancel = true;
    return;
    }
    }

    //

    private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
    if (e.Cancelled)
    this.Text = "cancelled";
    }
    حالا اگر طبق کد بالا عمل کنيم برنامه به خط پر کردن ديتا تيبل ميرسه و مدتی طول ميکشه !
    حالا اگر در همين مدت کاربر درخواست Cancel داشته باشه ، چی ؟

  8. #8
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059

    نقل قول: مشکل با backgroundWorker

    سلام
    یک راه سریع برای توقف هر ریسمانی وجود دارد که البته آخرین راه حل باید باشد!
    متد Abort


    private System.Threading.Thread m_Thread;

    private void button_Click(object sender, EventArgs e)
    {
    System.Threading.Thread thread = this.m_Thread;
    if (thread != null)
    {
    try
    {
    thread.Abort();
    }
    catch { }
    }
    }

    private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
    {
    this.Thread = System.Threading.Thread.CurrentThread;
    //...
    //anu code...
    //...
    this.Thread = null;
    }

    private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
    this.Thread = null;
    //...
    //anu code...
    //...
    }


    موفق باشید.

  9. #9
    کاربر دائمی آواتار hamid67fathi
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    WwW
    پست
    435

    نقل قول: مشکل با backgroundWorker

    سلام
    ممنون که راهنمايی ميکنيد !
    امکانش هست که توضيحی در مورد نحوه کار کرد کد بديد ؟

  10. #10
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059

    نقل قول: مشکل با backgroundWorker

    سلام
    توضیح خاص و پیچیده ای ندارد ...
    هر ریسمان در دات نت یک کلاس دارد.
    با شروع ریسمان جدید در قالب backgroundWorker و رویداد bgWorker_DoWork کلاس ریسمان را بدست آورده و در متغییری ذخیره میکنیم...
    در پایان کار ریسمان هم این متغییر را خالی میکنیم.

    سپس در متد لغو عملیات یا همان cancel اگر متغییر ریسمان خالی نباشد متد Abort را برای توقف سریع ریسمان اجرا میکنیم. (یک چیز تو مایه های EndTask !) کدهای اجرایی درون آن ریسمان در هر جایی باشند با خطای ThreadAbortException متوقف میشود.
    (اون متغییر محلی داخل button_Click اضافی نیست و بهتر است بگذارید بماند!)

    موفق باشید.

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

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