releases/VideoDownloader.App/CrashReportDialog.xaml.cs

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();
}