เธรดได้ออกจากรหัส 0 (0x0) โดยไม่มีข้อยกเว้นที่ไม่สามารถจัดการได้


97

ในขณะที่ดีบักแอปพลิเคชัน C # ของฉันฉันสังเกตเห็นประโยคต่อไปนี้เกิดขึ้นจำนวนมาก:

เธรด - ออกด้วยรหัส 0 (0x0)

แอปพลิเคชันยังคงทำงานต่อไปและไม่มีข้อยกเว้นใดที่ถูกจับ / ไม่ได้ใช้งาน

แอปพลิเคชันกำลังทำงานบน Windows 7 64 บิตและแก้ไขข้อบกพร่องด้วยแพลตฟอร์ม x86


1
แน่ใจเหรอว่านั่นคือกระทู้ของคุณ ถ้าเป็นเช่นนั้นคุณไม่คาดหวังให้พวกเขาเสร็จหรือ
SLaks

คำตอบ:


142

นี่เป็นเพียงการดีบักข้อความ Thread Exit Messagesคุณสามารถสลับที่ออกโดยคลิกขวาในหน้าต่างออกและยกเลิกการเลือก

http://msdn.microsoft.com/en-us/library/bs4c1wda.aspx

นอกเหนือจากโปรแกรมออกจากแอปพลิเคชันของคุณแล้วหน้าต่างผลลัพธ์ยังสามารถแสดงข้อมูลเกี่ยวกับ:

  • โมดูลที่ดีบักเกอร์โหลดหรือยกเลิกการโหลด

  • ข้อยกเว้นที่ถูกโยนทิ้ง

  • ประมวลผลทางออกนั้น

  • เธรดที่ออก


10

แอปพลิเคชันอาจมีเธรดจำนวนมากที่ทำงานแบบขนาน บางตัวดำเนินการโดยคุณผู้เขียนโค้ดบางตัวรันโดยคลาสเฟรมเวิร์ก (โดยเฉพาะถ้าคุณอยู่ในสภาพแวดล้อม GUI)

เมื่อเธรดเสร็จสิ้นภารกิจเธรดจะออกและหยุดที่จะมีอยู่ ไม่มีอะไรน่ากลัวในเรื่องนี้และคุณไม่ควรสนใจ


กระทู้ที่ฉันพูดถึงไม่ใช่ของฉัน (หรือไม่ได้เป็นของแอปพลิเคชันของฉัน) อย่างไรก็ตามแอปพลิเคชันของฉันจำเป็นต้องเชื่อมต่อกับเซิร์ฟเวอร์ Linux AIX ซึ่งส่งคืนพร้อมกับกระบวนการที่เลิกใช้งานจำนวนมาก ฉันไม่มีความคิดที่ชัดเจนเกี่ยวกับเซิร์ฟเวอร์นี้ใช้งานได้ (ซึ่งเป็นงานของเซิร์ฟเวอร์) แต่ฉันคิดว่าเธรดดังกล่าวอาจส่งผลต่อพฤติกรรมของเซิร์ฟเวอร์
Gionata

บางทีเธรดอาจส่งผลกระทบต่อแอปพลิเคชันของคุณจริง ๆ แต่ข้อความที่คุณได้รับบอกคุณว่าพวกเขายุติลงสำเร็จ ดังนั้นคุณสามารถลองหาสาเหตุที่เรียกใช้ (เมนูดีบัก => windows => เธรด) แต่นี่เป็นเรื่องปกติที่จะสิ้นสุด
Kek

พวกเขาสิ้นสุดตามปกติ แต่กระบวนการที่เลิกใช้เซิร์ฟเวอร์ Linux อาจเป็นผลข้างเคียงของเธรด. net framework บางทีแอปพลิเคชันอาจมีข้อผิดพลาดในการเขียนโปรแกรมต่างๆในการใช้งานมัลติเธรด เป็นไปได้ไหม?
Gionata

ฉันไม่รู้ เซิร์ฟเวอร์ linuw นี้กำลังเรียกใช้. NET? ใช้ Mono? ปัญหาของคุณคืออะไร? กระบวนการเลิกใช้?
Kek

ใช่กระบวนการ dufunct ทำให้เซิร์ฟเวอร์ Linux ขัดข้อง
Gionata

7

เพื่อให้คำตอบที่ยอมรับของ BlueM สมบูรณ์คุณสามารถยกเลิกการใช้งานได้ที่นี่:

เครื่องมือ> ตัวเลือก> การดีบัก> การตั้งค่าเอาต์พุตทั่วไป> ข้อความออกจากเธรด: ปิด


5
คำตอบที่ยอมรับของ BlueM มีวิธีแก้ปัญหาที่ง่ายกว่า: "คุณสามารถปิดได้โดยคลิกขวาที่หน้าต่างเอาต์พุตและยกเลิกการเลือกข้อความสิ้นสุดเธรด"
Simon MᶜKenzie

5

หากแอปพลิเคชันของคุณใช้เธรดโดยตรงหรือโดยอ้อม (เช่นอยู่เบื้องหลังเหมือนในไลบรารีของบุคคลที่สาม) เป็นเรื่องปกติที่เธรดจะยุติหลังจากเสร็จสิ้น ... ซึ่งโดยพื้นฐานแล้วเป็นสิ่งที่คุณอธิบาย ... ... คุณสามารถกำหนดค่าดีบักเกอร์ไม่ให้แสดงข้อความนี้ได้หากคุณไม่ต้องการ ...

หากข้างต้นไม่สามารถช่วยได้โปรดให้รายละเอียดเพิ่มเติมเนื่องจากฉันไม่แน่ใจว่าปัญหาที่คุณเผชิญอยู่ ...


1

เฟรมเวิร์กจะสร้างเธรดเพื่อรองรับแต่ละหน้าต่างที่คุณสร้างเช่นเมื่อคุณสร้างฟอร์มและแสดง () เมื่อหน้าต่างปิดเธรดจะถูกยกเลิก (กล่าวคือออก)

นี่เป็นพฤติกรรมปกติ อย่างไรก็ตามหากแอปพลิเคชันกำลังสร้างเธรดและมีข้อความออกจากเธรดจำนวนมากที่เกี่ยวข้องกับเธรดเหล่านี้ (อาจบอกได้จากชื่อเธรดโดยระบุชื่อที่แตกต่างกันในแอพ) บางทีนี่อาจบ่งบอกถึงปัญหา ด้วยแอปที่สร้างเธรดเมื่อไม่ควรเนื่องจากข้อผิดพลาดทางตรรกะของโปรแกรม

การติดตามผู้โพสต์ต้นฉบับจะเป็นเรื่องที่น่าสนใจที่จะแจ้งให้เราทราบว่าเขาค้นพบอะไรเกี่ยวกับปัญหาเซิร์ฟเวอร์ล่ม ฉันรู้สึกว่ามันคงไม่เกี่ยวอะไรกับเรื่องนี้ ... แต่มันยากที่จะบอกได้จากข้อมูลที่โพสต์


1

การดำเนินการแบบสอบถาม Linq สามารถสร้างเธรดเพิ่มเติมได้ เมื่อฉันพยายามรันโค้ดที่ใช้การรวบรวมแบบสอบถาม Linq ในหน้าต่างทันทีมันมักจะปฏิเสธที่จะรันเนื่องจากมีเธรดไม่เพียงพอสำหรับดีบักเกอร์

ดังที่คนอื่น ๆ กล่าวไว้สำหรับเธรดที่จะออกเมื่อเสร็จสิ้นถือเป็นเรื่องปกติอย่างสมบูรณ์


-1

ฉันประสบปัญหานี้เช่นกันและวิธีแก้ปัญหาคือ:

  1. เปิด Solution Explore
  2. ดับเบิลคลิกที่ไฟล์ Program.cs

ฉันเพิ่มรหัสนี้อีกครั้งและโปรแกรมของฉันทำงานได้อย่างถูกต้อง:

Application.Run(new PayrollSystem()); 
//File name this code removed by me accidentally.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.