Announcement

Collapse
No announcement yet.

[C#][Winform][BackgroundWorker] Không cancelAsync được BackgroundWorker

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [C#][Winform][BackgroundWorker] Không cancelAsync được BackgroundWorker

    Đại khái là mình cho backgroundworker nó runasync một cái hàm đệ qui. Mình có tìm thấy 1 ví dụ trên msdn tương tự với cái mình đang làm:http://msdn.microsoft.com/en-us/library/4852et58
    Cái của họ thì cancel tốt mà cái của mình thì ko hiểu sao ko cancel được. Các bạn xem giùm mình với, project mình up lên MF link bên dưới
    Waiting for the day my nickname get painted black and underlined ...!

  • #2
    Cái này là vì anh chỉ mới cancel cái progress làm đệ quy trong của BackgroundWorker thôi, còn việc vẽ nội dung trên form vẫn tiếp tục thực hiện cho đến khi nó kết thúc. Vậy nên khi cancel anh phải làm cái gì đó để nó break khỏi vòng lặp trong hàm update. Ví dụ như em tạo 1 biến boolean cancel như sau:

    Code:
    bool cancel = false;
            private void button2_Click(object sender, EventArgs e)
            {
                backgroundWorker1.CancelAsync();
                cancel = true;           
                isResetRequested = true;
                trackBar1.Enabled = true;
            }
    hàm update() được chỉnh lại như sau:

    Code:
    private void update(Disk disk, Tower sourceT, Tower destinationT)
            {
                disk.TargetX = destinationT.getMiddleX() - disk.Width / 2;
                disk.TargetY = destinationT.UpBottomY - Constants.DISK_THICK;
                do
                {
                    if (!cancel)
                    {
                        paint();
                        Thread.Sleep(30);
                    }
                } while (!disk.update());
                destinationT.UpBottomY -= Constants.DISK_THICK;
                sourceT.UpBottomY += Constants.DISK_THICK;
            }
    Làm như vậy thì ngay nó sẽ dừng ngay việc vẽ lại. Cách này có thể không phải là hay nhất nhưng giải pháp cơ bản là vậy . Nếu làm cách này trong hàm xử lí event button1_click phải thực hiện 1 số công việc như clear, gán lại giá trị biến cancel...
    Last edited by 09520134; 27-05-2012, 16:03.

    Comment


    • #3
      Ừ nhỉ, đúng là đầu óc mình lú lẫn hết rồi. Thanks bạn nhé
      Waiting for the day my nickname get painted black and underlined ...!

      Comment

      LHQC

      Collapse
      Working...
      X