Tuesday, May 4, 2010

Thread was being aborted

  • “Thread was being aborted” exception whilst displaying dialog
  • ด้านบนคืออ้างอิงจาก overstack.com
  • จากบทความเดิมที่ได้เขียนไว้เมื่อปีก่อน ตอนเจอปัญหาใหม่ๆ
  • ตอนนั้น คิดว่าแก้ปัญหาได้แล้ว แต่มันก็ยัง exception thread was being aborted อยู่ดี
  • ใน overstack เค้าไม่แนะนำให้ใช้ abort() เลย เพราะเป็นการยกเลิก thread แบบไม่ปลอดภัยซะงั้น
  • เราก็เลยไปดูโคด้ safethread ที่ codeproject.com
  • อ่านโค้ดเค้าไม่รู้เรื่องหว่า กำ - -'
  • แต่เห็นใน safethread เค้าใช้ collection มาเกี่ยวด้วยล่ะ
  • เราก็เลยประยุกค์ใช้ Queue มาช่วยใน app เราซะเลย
  • ผลปรากฏว่า ลองทั้งวัน ยังไม่ขึ้น thread was being aborted เลยครับพี่น้อง
  • อันนี้คือตัวอย่างโค้ดเดิมที่เกิดปัญหา
myThread.start();
.............................
Thread.sleep(xxxx);
myThread.abort();
  • โค้ดใหม่
Queue myQ = new Queue();
myQ.Enqueue(myThread);
myThread.start();
.............................
Thread.sleep(xxxx);
myThread.abort();
.............................
((Thread)myQ.Dequeue()).Abort();
Thread myThread= new Thread(ThreadLoadBarMethod);
myThread.Start();
.............................
Thread.sleep(xxxx);
myThread.abort();

เพิ่มเติม
  • อีกอย่างเราต้องเอา title bar ที่ Loadin Form ออกก่อนเลย
  • โดยเลือก FormBorderStyle เป็น none
  • เพราะ ถ้ามี title bar อยู่ เมื่อ loading form ทำงาน เราเอา mouse ไป click form นั้นไว้
  • เมื่อ thread ถูก abort ทำให้ เกิด exception เพราะมันจะทำลาย form แต่ mouse เรายังค้างอยู่

อ้างอิง

No comments:

Post a Comment