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

Đề tài: Cách hủy thread từ một thread khác trong C#?

  1. #1
    Ngày gia nhập
    05 2010
    Bài viết
    345

    Mặc định Cách hủy thread từ một thread khác trong C#?

    Xin chào cả nhà.
    Em đang có 1 vấn đề nan giải mà chưa biết cách giải quyết như sau.
    Visual C# Code:
    1. //Thread A
    2. void a(object thread)
    3. {
    4. {
    5. gọi thread B(truyền thread A)
    6.  while(true) {// làm cái gì đó như sẽ không bao h ra khỏi vòng while}
    7. }
    8. catch (ThreadAbortException expthread)
    9. {
    10. // bắt bị hủy ở đây
    11. }
    12. }
    13.  
    14. //Thread B
    15. void b(object threadA)
    16. {
    17. while (điều kiện) {// làm một việc gì đó nếu thỏa mã sẽ hủy thread A (thread.Abort())}
    18. }
    Tóm tắt là Thread A tạo Thread B và khi đến 1 thời điểm nào đó thì Thread B hủy Thread A, nhưng mà do vòng lặp while ở Thread A nên không thể bắt exception được.
    Em debug thì thấy threadA không bị hủy mà chỉ bị AbortRequested.
    Nhưng mà muốn bắt được sự kiện AbortRequested thì vòng while ở threadA phải thoát khỏi.
    Vậy có các nào có cách giải quyết cho em trong trường hợp này không vậy
    Đã được chỉnh sửa lần cuối bởi tuandoi1 : 07-03-2012 lúc 01:23 AM.

  2. #2
    Ngày gia nhập
    05 2010
    Bài viết
    345

    Up, ai giúp em với

  3. #3
    Ngày gia nhập
    12 2008
    Nơi ở
    Hanoi, Vietnam, Vietnam
    Bài viết
    20

    Trích dẫn Nguyên bản được gửi bởi tuandoi1 Xem bài viết
    Xin chào cả nhà.
    Em đang có 1 vấn đề nan giải mà chưa biết cách giải quyết như sau.
    Visual C# Code:
    1. //Thread A
    2. void a(object thread)
    3. {
    4. {
    5. gọi thread B(truyền thread A)
    6.  while(true) {// làm cái gì đó như sẽ không bao h ra khỏi vòng while}
    7. }
    8. catch (ThreadAbortException expthread)
    9. {
    10. // bắt bị hủy ở đây
    11. }
    12. }
    13.  
    14. //Thread B
    15. void b(object threadA)
    16. {
    17. while (điều kiện) {// làm một việc gì đó nếu thỏa mã sẽ hủy thread A (thread.Abort())}
    18. }
    Tóm tắt là Thread A tạo Thread B và khi đến 1 thời điểm nào đó thì Thread B hủy Thread A, nhưng mà do vòng lặp while ở Thread A nên không thể bắt exception được.
    Em debug thì thấy threadA không bị hủy mà chỉ bị AbortRequested.
    Nhưng mà muốn bắt được sự kiện AbortRequested thì vòng while ở threadA phải thoát khỏi.
    Vậy có các nào có cách giải quyết cho em trong trường hợp này không vậy
    Để xem nào...
    Bạn thử làm thế này nhé:

    bool runningA = true; //biến toàn cục

    Thread A:
    - Gọi thread B
    - while(runningA){ ... }

    Thead B:
    - Làm 1 việc gì đó
    - Gặp điều kiện tắt A thì gán runningA = false;
    - threadA.Aborted();

  4. #4
    Ngày gia nhập
    05 2010
    Bài viết
    345

    Thực ra là không có cách nào nếu trong vòng while nó là 1 việc gì nó là cứ treo, cụ thể ở code của mình là nó cứ đợi packet từ client gửi về dù có hủy đi thì cũng vô tác dụng state của thread bị hủy sẽ là requestaborted. Phải làm cho nó chạy tiếp ko đợi ở dòng đó nữa. Mình chỉ cần hủy cái socket mà thread bị hủy đang đọc là exception sẽ xảy ra và thead sẽ bị hủy ngay lập tức. Lọ mọ mãi thì code lại rất đơn giản. Cảm ơn bạn đã trả lời

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

  1. Sự khác nhau giữa thread 6 và thread 7 trong Java?
    Gửi bởi nt.huy91 trong diễn đàn Thắc mắc lập trình Java
    Trả lời: 5
    Bài viết cuối: 26-10-2012, 01:32 PM
  2. Trả lời: 0
    Bài viết cuối: 16-02-2012, 10:37 PM
  3. Hủy Thread khi đang copy file trong thread?
    Gửi bởi khabin trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 6
    Bài viết cuối: 27-01-2012, 09:15 PM
  4. Giới thiệu thread và multi thread trong lập trình C#
    Gửi bởi dieucay555 trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 26-07-2011, 06:16 PM
  5. Thread trong Dialog và Thread trog Tabcontrol ???
    Gửi bởi nam_dkn trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 20-03-2009, 10:43 AM

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