- “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 เรายังค้างอยู่
อ้างอิง
- http://juuier.blogspot.com/2009/04/threadabortexception.html
- http://stackoverflow.com/questions/220643/thread-was-being-aborted-exception-whilst-displaying-dialog
- http://www.codeproject.com/KB/threads/SafeThread.aspx
- http://www.windows-tech.info/1/c432be384d657bdb.php
- http://stackoverflow.com/questions/1327102/how-to-kill-a-thread-instantly-in-c
No comments:
Post a Comment