แนวปฏิบัติที่ดีที่สุดคืออะไรหากมีข้อยกเว้นที่ไม่สามารถจัดการได้เกิดขึ้นในแอปพลิเคชันเดสก์ท็อป
ฉันกำลังคิดที่จะแสดงข้อความถึงผู้ใช้เพื่อให้เขาสามารถติดต่อฝ่ายสนับสนุน ฉันจะแนะนำให้ผู้ใช้รีสตาร์ทแอปพลิเคชัน แต่ไม่บังคับ คล้ายกับสิ่งที่กล่าวถึงที่นี่: ux.stackexchange.com - วิธีที่ดีที่สุดในการจัดการข้อผิดพลาดของแอปพลิเคชันคืออะไร
โครงการนี้เป็นแอปพลิเคชั่น. NET WPF ดังนั้นข้อเสนอที่อธิบายไว้อาจมีลักษณะเช่นนี้ (โปรดทราบว่านี่เป็นตัวอย่างแบบง่าย ๆ อาจเป็นไปได้ที่จะซ่อนรายละเอียดข้อยกเว้นจนกว่าผู้ใช้จะคลิกที่ "แสดงรายละเอียด" รายงานข้อผิดพลาดได้อย่างง่ายดาย):
public partial class App : Application
{
public App()
{
DispatcherUnhandledException += OnDispatcherUnhandledException;
}
private void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
LogError(e.Exception);
MessageBoxResult result = MessageBox.Show(
$"Please help us fix it and contact support@example.com. Exception details: {e.Exception}" +
"We recommend to restart the application. " +
"Do you want to stop the application now? (Warning: Unsaved data gets lost).",
"Unexpected error occured.", MessageBoxButton.YesNo);
// Setting 'Handled' to 'true' will prevent the application from terminating.
e.Handled = result == MessageBoxResult.No;
}
private void LogError(Exception ex)
{
// Log to a log file...
}
}
ในการใช้งาน (คำสั่งของ ViewModels หรือตัวจัดการเหตุการณ์ของเหตุการณ์ภายนอก) จากนั้นฉันจะตรวจจับข้อยกเว้นภายนอกเฉพาะและปล่อยให้ข้อยกเว้นอื่น ๆ ทั้งหมด (ข้อยกเว้นที่ไม่ถูกต้อง สำหรับคำนิยามของข้อยกเว้นที่กระดูกและภายนอกมีลักษณะที่: Eric Lippert - ข้อยกเว้น Vexing
มันสมเหตุสมผลหรือไม่ที่จะให้ผู้ใช้ตัดสินใจว่าควรยกเลิกแอปพลิเคชันหรือไม่ เมื่อแอปพลิเคชั่นถูกยกเลิกคุณแน่ใจว่าไม่มีสถานะที่ไม่สอดคล้องกัน ... ในทางกลับกันผู้ใช้อาจสูญเสียข้อมูลที่ไม่ได้บันทึกหรือไม่สามารถหยุดกระบวนการภายนอกที่เริ่มต้นอีกต่อไปจนกว่าแอปพลิเคชันจะเริ่มต้นใหม่
หรือการตัดสินใจว่าคุณควรยกเลิกแอปพลิเคชั่นในข้อยกเว้นที่ไม่สามารถจัดการได้ขึ้นอยู่กับประเภทของแอปพลิเคชันที่คุณกำลังเขียนอยู่หรือไม่? มันเป็นเพียงการแลกเปลี่ยนระหว่าง "ความทนทาน" กับ "ความถูกต้อง" ตามที่อธิบายไว้ใน Code Complete, Second Edition
เพื่อให้คุณทราบถึงชนิดของแอปพลิเคชันที่เรากำลังพูดถึง: แอปพลิเคชันส่วนใหญ่ใช้เพื่อควบคุมเครื่องมือในห้องปฏิบัติการทางเคมีและแสดงผลลัพธ์ที่วัดได้ให้กับผู้ใช้ เมื่อต้องการทำเช่นนั้นแอปพลิเคชัน WPF สื่อสารกับบริการบางอย่าง (บริการท้องถิ่นและบริการระยะไกล) แอปพลิเคชัน WPF ไม่สื่อสารโดยตรงกับเครื่องมือ