Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Lỗi Cross-thread operation not valid và cách khắc phục

  1. #1
    Ngày gia nhập
    04 2011
    Bài viết
    83

    Mặc định Lỗi Cross-thread operation not valid và cách khắc phục

    thật sự e không biết lỗi này do đâu, đã search nhưng không hiểu, anh chị nào giúp em với
    Visual C# Code:
    1.  private void buttonX3_Click(object sender, EventArgs e)
    2.         {
    3.             if (checkBoxX2.Checked == true)
    4.             {
    5.                 Directory.CreateDirectory(textBoxX1.Text + @"\1192fxs");
    6.                 ThreadStart ts1 = new ThreadStart(ABC);
    7.                 Thread tA = new Thread(ts1);
    8.                 tA.Start();
    9.                 Directory.Delete(textBoxX1.Text + @"\1192fxs");
    10.             }
    11.         }
    12.  void ABC()
    13.         {
    14.             CayThuMuc(textBoxX1.Text);
    15.         }
    16.         void CayThuMuc(string sDiaChi)
    17.         {
    18.             string[] DriveList = Directory.GetDirectories(sDiaChi);
    19.             string[] DriveList2 = Directory.GetFiles(sDiaChi);
    20.             string strExtension;
    21.             for (int j = 0; j < DriveList2.Length; j++)
    22.             {
    23.                 File.SetAttributes(DriveList2[j], FileAttributes.Normal);
    24.  
    25.                 if (chkShortcut.Checked == true)
    26.                 {
    27.                     strExtension = Path.GetExtension(DriveList2[j]);
    28.  
    29.                     if (strExtension.Substring(strExtension.Length - 3, 3).ToLower()== "lnk")
    30.                         File.Delete(DriveList2[j]);
    31.                 }
    32.             }
    33.             for (int i = 0; i < DriveList.Length; i++)
    34.             {
    35.                 string name = DriveList[i].Substring(DriveList[i].LastIndexOf("\\") + 1);
    36.                switch(name)
    37.                {
    38.                    case "System Volume Information":
    39.                    case "con":
    40.                        break;
    41.                    default:
    42.                        {
    43.  
    44.                            File.SetAttributes(DriveList[i], FileAttributes.Normal);
    45.                            labelX1.Text = DriveList[i];
    46.                            CayThuMuc(DriveList[i]);
    47.                        
    48.                        } break;
    49.                }
    50.             }
    51.         }

  2. #2
    Ngày gia nhập
    04 2009
    Nơi ở
    Gầm cầu
    Bài viết
    2,230

    mặc định chương trình chính là 1 main thread
    em dùng 1 thread khác để sử dụng tài nguyên của main thread -> điều này mặc định là ko được phép. vì các thread vốn độc lập với nhau.
    em có thể dùng delegate,invoke method để có thể tương tác với tài nguyên của main thread.Bản chất của nó là tạo 1 listener , nó giống như tạo listener trong Java vậy.
    Đã được chỉnh sửa lần cuối bởi zstar : 27-08-2011 lúc 02:12 PM.

  3. #3
    Ngày gia nhập
    04 2011
    Bài viết
    83

    Trích dẫn Nguyên bản được gửi bởi zstar Xem bài viết
    mặc định chương trình chính là 1 main thread
    em dùng 1 thread khác để sử dụng tài nguyên của main thread -> điều này là ko được phép. vì các thread vốn độc lập với nhau.
    em có thể dùng delegate,invoke method để có thể tương tác với tài nguyên của main thread.Bản chất của nó là tạo 1 listener , nó giống như tạo listener trong Java vậy.
    Java thì e không biết gì hết
    nếu như thế này thì giải quyết sao vậy anh
    Visual C# Code:
    1. private void buttonX1_Click(object sender, EventArgs e)
    2.         {
    3.            
    4.             ThreadStart ts1 = new ThreadStart(ABC);
    5.             ts1.Start();
    6.             label2.Text = a;
    7.             label1.Text = b;
    8.         }
    9.         void ABC()
    10.         {
    11.          
    12.             for (int i = 0; i < 100; i++)
    13.             {
    14.                 a = i.ToString();
    15.                 for (int j = 0; j < 100; j++)
    16.                     b = j.ToString();
    17.             }
    18.         }

  4. #4
    Ngày gia nhập
    08 2011
    Nơi ở
    Hà Nội | http://ipmac.vn
    Bài viết
    198

    Trích dẫn Nguyên bản được gửi bởi zstar Xem bài viết
    mặc định chương trình chính là 1 main thread
    em dùng 1 thread khác để sử dụng tài nguyên của main thread -> điều này mặc định là ko được phép. vì các thread vốn độc lập với nhau.
    em có thể dùng delegate,invoke method để có thể tương tác với tài nguyên của main thread.Bản chất của nó là tạo 1 listener , nó giống như tạo listener trong Java vậy.
    zstar phán quá chuẩn
    Bao chàng trai không tiếc tuổi xuân đang viết nhiều chương trình
    Em đẹp xinh cũng quyết lập công chưa muốn lấy chồng
    http://ipmac.vn/ <- Học lập trình ... sư
    http://laptrinh.tv/ <- Kênh chia sẻ video học IT
    http://www.youtube.com/user/anhnt3 <- Video thực hành lập trình... sư từ A-Z

  5. #5
    Ngày gia nhập
    08 2011
    Nơi ở
    Hà Nội | http://ipmac.vn
    Bài viết
    198

    Trích dẫn Nguyên bản được gửi bởi chitvivo Xem bài viết
    Java thì e không biết gì hết
    nếu như thế này thì giải quyết sao vậy anh
    Visual C# Code:
    1. private void buttonX1_Click(object sender, EventArgs e)
    2.         {
    3.            
    4.             ThreadStart ts1 = new ThreadStart(ABC);
    5.             ts1.Start();
    6.             label2.Text = a;
    7.             label1.Text = b;
    8.         }
    9.         void ABC()
    10.         {
    11.          
    12.             for (int i = 0; i < 100; i++)
    13.             {
    14.                 a = i.ToString();
    15.                 for (int j = 0; j < 100; j++)
    16.                     b = j.ToString();
    17.             }
    18.         }
    hi bạn, bạn làm theo hướng dẫn sau nhé
    http://forums.congdongcviet.com/show...80&postcount=4

    cần invoke vào để việc truy cập control trên GUI của bạn nằm trên mainthread (GUI)
    Bao chàng trai không tiếc tuổi xuân đang viết nhiều chương trình
    Em đẹp xinh cũng quyết lập công chưa muốn lấy chồng
    http://ipmac.vn/ <- Học lập trình ... sư
    http://laptrinh.tv/ <- Kênh chia sẻ video học IT
    http://www.youtube.com/user/anhnt3 <- Video thực hành lập trình... sư từ A-Z

  6. #6
    Ngày gia nhập
    04 2011
    Bài viết
    83

    Mặc định Lỗi Cross-thread operation not valid và cách khắc phục

    Trích dẫn Nguyên bản được gửi bởi anhnt3 Xem bài viết
    hi bạn, bạn làm theo hướng dẫn sau nhé
    http://forums.congdongcviet.com/show...80&postcount=4

    cần invoke vào để việc truy cập control trên GUI của bạn nằm trên mainthread (GUI)
    code VB e chỉ sơ sơ thui :(, vấn đề này em không hiểu nên đọc VB cũng chẵng hiểu gì

  7. #7
    Ngày gia nhập
    01 2011
    Bài viết
    2

    Bạn nào bị lỗi có thể dùng cách của mình như sau.

    this.Invoke(new MethodInvoker(delegate()
    {
    //Element nao bi loi thi cho vao trong nay vi du nhu phia duoi..
    //txtLog.Text += msgToSend.strMessage + "\r\n";
    }));

    Hy vọng là nó oke

Các đề tài tương tự

  1. Xử lý lỗi Cross-thread | Cross-thread operation not valid
    Gửi bởi sunflower trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 19
    Bài viết cuối: 23-07-2012, 09:12 PM
  2. Cross-thread operation not valid: Control 'txt_1' accessed from a thread other than?
    Gửi bởi ndp1007 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 01-03-2012, 12:20 AM
  3. Trả lời: 0
    Bài viết cuối: 16-02-2012, 10:37 PM
  4. lỗi Cross-thread operation not valid khi dùng thread
    Gửi bởi Riku trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 13-04-2011, 02:50 PM
  5. Một bệnh khó chữa :"Operation is not valid ... SetCurrentCellAddress "
    Gửi bởi HungDL trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 08-10-2008, 01:15 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn