เรามีแอปพลิเคชั่น WPF ซึ่งบางส่วนของมันอาจเกิดข้อยกเว้นในขณะทำงาน ฉันต้องการจับข้อยกเว้นที่ไม่สามารถจัดการได้ทั่วโลกและบันทึกพวกเขา แต่อย่างอื่นดำเนินการโปรแกรมต่อไปราวกับว่าไม่มีอะไรเกิดขึ้น (kinda เช่น VB's On Error Resume Next
)
เป็นไปได้ใน C #? และถ้าเป็นเช่นนั้นฉันจะต้องวางรหัสการจัดการข้อยกเว้นไว้ที่ไหน
ขณะนี้ฉันไม่เห็นจุดใดจุดหนึ่งที่ฉันสามารถล้อมรอบtry
/ catch
และซึ่งจะจับข้อยกเว้นทั้งหมดที่อาจเกิดขึ้น และถึงอย่างนั้นฉันก็จะเหลืออะไรก็ตามที่ถูกประหารเพราะจับได้ หรือฉันกำลังคิดผิดทางอย่างน่ากลัวที่นี่?
การทางพิเศษแห่งประเทศไทย:เพราะหลายคนด้านล่างชี้ให้เห็น: แอพลิเคชันไม่ได้สำหรับการควบคุมโรงไฟฟ้านิวเคลียร์ ถ้ามันล้มเหลวมันไม่ได้เป็นเรื่องใหญ่อะไร แต่มีข้อยกเว้นแบบสุ่มที่เกี่ยวข้องกับ UI เป็นส่วนใหญ่เป็นสิ่งที่สร้างความรำคาญในบริบทที่มันจะถูกใช้ มี (และอาจจะยังคงเป็น) บางส่วนและเนื่องจากใช้สถาปัตยกรรมปลั๊กอินและอาจขยายโดยผู้อื่น (เช่นนักเรียนในกรณีนั้นดังนั้นจึงไม่มีนักพัฒนาที่มีประสบการณ์ที่สามารถเขียนโค้ดปราศจากข้อผิดพลาดได้อย่างสมบูรณ์)
สำหรับข้อยกเว้นที่ตรวจพบ: ฉันบันทึกไว้ในไฟล์บันทึกรวมถึงการติดตามสแต็กทั้งหมด นั่นคือจุดรวมของการออกกำลังกายนั้น เพียงเพื่อตอบโต้คนเหล่านั้นที่กำลังเปรียบเทียบกับ OERN ของ VB อย่างแท้จริง
ฉันรู้ว่าการละเว้นข้อผิดพลาดบางประเภทเป็นอันตรายและอาจทำให้แอปพลิเคชันของฉันเสียหาย อย่างที่เคยกล่าวไว้ก่อนหน้านี้โปรแกรมนี้ไม่ได้มีความสำคัญสำหรับทุกคน ไม่มีใครในใจที่ถูกต้องของพวกเขาจะพนันความอยู่รอดของอารยธรรมมนุษย์ในนั้น มันเป็นเพียงเครื่องมือเล็ก ๆ สำหรับการทดสอบแนวทางการออกแบบบางอย่าง วิศวกรรมซอฟต์แวร์.
สำหรับการใช้งานแอปพลิเคชั่นในทันทีมีหลายสิ่งที่อาจเกิดขึ้นได้ยกเว้น:
- ไม่มีการจัดการข้อยกเว้น - กล่องโต้ตอบข้อผิดพลาดและการออกจากแอปพลิเคชัน ต้องทำการทดสอบซ้ำแม้ว่าจะมีอีกเรื่องหนึ่ง ไม่มีข้อผิดพลาดถูกบันทึกซึ่งเป็นโชคร้าย
- การจัดการข้อยกเว้นทั่วไป - ข้อผิดพลาดที่เป็นพิษเป็นภัยติดไม่ทำอันตราย นี่ควรเป็นกรณีทั่วไปที่ตัดสินจากข้อผิดพลาดทั้งหมดที่เราเห็นระหว่างการพัฒนา การละเว้นข้อผิดพลาดประเภทนี้ไม่ควรมีผลกระทบในทันที โครงสร้างข้อมูลหลักได้รับการทดสอบอย่างดีพอที่พวกเขาจะอยู่รอดได้อย่างง่ายดาย
- การจัดการข้อยกเว้นทั่วไป - ข้อผิดพลาดร้ายแรงที่ติดอยู่อาจผิดพลาดได้ในภายหลัง สิ่งนี้อาจเกิดขึ้นได้ยาก เราไม่เคยเห็นมันมาก่อน ข้อผิดพลาดถูกบันทึกต่อไปและความผิดพลาดอาจหลีกเลี่ยงไม่ได้ ดังนั้นนี่คือแนวคิดคล้ายกับกรณีแรก ยกเว้นว่าเรามีการติดตามสแต็ก และในกรณีส่วนใหญ่ผู้ใช้จะไม่ได้แจ้งให้ทราบล่วงหน้า
สำหรับข้อมูลการทดสอบที่สร้างโดยโปรแกรม: ข้อผิดพลาดร้ายแรงที่แย่ที่สุดก็แค่ทำให้ไม่มีการบันทึกข้อมูล การเปลี่ยนแปลงเล็กน้อยที่เปลี่ยนผลลัพธ์ของการทดสอบที่เคยมีมานั้นเล็กน้อยไม่น่าจะเป็นไปได้ และแม้แต่ในกรณีนั้นหากผลลัพธ์ที่น่าสงสัยข้อผิดพลาดถูกบันทึกไว้; ยังคงสามารถทิ้งจุดข้อมูลนั้นถ้ามันเป็นค่าทั้งหมด
ในการสรุป: ใช่ฉันคิดว่าตัวเองยังมีสติอยู่อย่างน้อยบางส่วนและฉันไม่ได้พิจารณาชุดคำสั่งการจัดการข้อยกเว้นระดับโลกซึ่งทำให้โปรแกรมทำงานได้อย่างไม่จำเป็น ดังที่ได้กล่าวไว้สองครั้งก่อนหน้าการตัดสินใจดังกล่าวอาจใช้ได้ขึ้นอยู่กับแอปพลิเคชัน ในกรณีนี้มันถูกตัดสินว่าเป็นการตัดสินใจที่ถูกต้องไม่ใช่ทั้งหมดและไร้สาระที่สุด สำหรับแอปพลิเคชันอื่น ๆ ที่การตัดสินใจอาจแตกต่างกัน แต่โปรดอย่ากล่าวหาฉันหรือคนอื่น ๆ ที่ทำงานในโครงการเพื่อทำให้โลกนี้ระเบิดเพราะเราไม่สนใจข้อผิดพลาด
หมายเหตุด้านข้าง: มีผู้ใช้หนึ่งรายสำหรับแอปพลิเคชันนั้น ไม่ใช่สิ่งที่เหมือนกับ Windows หรือ Office ที่มีผู้ใช้หลายล้านคนซึ่งค่าใช้จ่ายในการยกเว้นฟองสบู่ให้กับผู้ใช้จะแตกต่างกันมากในตอนแรก
On Error Resume Next
เป็นไปไม่ได้ใน C # หลังจากException
(C # ไม่มี "ข้อผิดพลาด") คุณไม่สามารถดำเนินการต่อด้วยคำสั่งถัดไป: การดำเนินการจะดำเนินการต่อในcatch
บล็อก - หรือหนึ่งในตัวจัดการเหตุการณ์ที่อธิบายไว้ในคำตอบด้านล่าง