using System.Windows; namespace VideoDownloader.App; /// UC-N18 크래시 리포트 대화상자 — 처리되지 않은 예외의 요약·스택을 보여주고 복사를 제공한다. /// App 글로벌 예외 핸들러가 기록(crash.log) 후 사용자에게 표시한다. public partial class CrashReportDialog : Window { /// 같은 예외 폭주로 다이얼로그가 연쇄 뜨는 것을 막는 재진입 가드. public static bool IsOpen { get; private set; } public CrashReportDialog(Exception ex) { InitializeComponent(); DetailBox.Text = $"{ex.GetType().Name}: {ex.Message}\r\n\r\n{ex.StackTrace}"; Closed += (_, _) => IsOpen = false; } /// 비모달 표시(재진입 가드). 이미 떠 있으면 무시한다. public static void Show(Exception ex) { if (IsOpen) return; IsOpen = true; try { new CrashReportDialog(ex).Show(); } catch { IsOpen = false; } } private void Copy_Click(object sender, RoutedEventArgs e) { try { Clipboard.SetText(DetailBox.Text); } catch { } } private void Close_Click(object sender, RoutedEventArgs e) => Close(); }