34 lines
1.2 KiB
C#
34 lines
1.2 KiB
C#
using System.Windows;
|
|
|
|
namespace VideoDownloader.App;
|
|
|
|
/// <summary>UC-N18 크래시 리포트 대화상자 — 처리되지 않은 예외의 요약·스택을 보여주고 복사를 제공한다.
|
|
/// App 글로벌 예외 핸들러가 기록(crash.log) 후 사용자에게 표시한다.</summary>
|
|
public partial class CrashReportDialog : Window
|
|
{
|
|
/// <summary>같은 예외 폭주로 다이얼로그가 연쇄 뜨는 것을 막는 재진입 가드.</summary>
|
|
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;
|
|
}
|
|
|
|
/// <summary>비모달 표시(재진입 가드). 이미 떠 있으면 무시한다.</summary>
|
|
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();
|
|
}
|