feat: 用户友好的异常处理

This commit is contained in:
gdlcf88
2022-10-27 23:49:20 +08:00
parent 7cf4529946
commit 7e14628529
11 changed files with 140 additions and 0 deletions

View File

@@ -19,6 +19,7 @@ using System.Windows;
using System.Windows.Threading;
using GlobalHotKey;
using MeoAsstGui.MaaHotKeys;
using MeoAsstGui.Views;
using Microsoft.Toolkit.Uwp.Notifications;
using Stylet;
using StyletIoC;
@@ -121,6 +122,10 @@ namespace MeoAsstGui
{
// 抛异常了,可以打些日志
File.AppendAllText("gui.err.log", DateTime.Now.ToString() + ' ' + e.Exception.ToString() + '\n');
var errorView = new ErrorView(e.Exception.Message, e.Exception.StackTrace, true);
errorView.ShowDialog();
errorView.Pause();
}
}
}

View File

@@ -186,6 +186,7 @@
<DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Views\ErrorView.xaml.cs" />
<Page Include="Resources\Localizations\ko-kr.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
@@ -268,6 +269,7 @@
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\ErrorView.xaml" />
<Page Include="Views\SettingsView.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
@@ -483,6 +485,11 @@
<ItemGroup>
<Resource Include="newlogo.ico" />
</ItemGroup>
<ItemGroup>
<Content Include="Resources\Images\Warning.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>xcopy /e /y /i /c "$(ProjectDir)..\..\3rdparty\tools" "$(TargetDir)"

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -331,6 +331,11 @@
<!-- AsstProxy -->
<system:String x:Key="UnknownAbnormal">The resource is damaged, please download the full package again</system:String>
<system:String x:Key="Error">Error</system:String>
<system:String x:Key="ErrorDetails">Details</system:String>
<system:String x:Key="ErrorFeedback">Feedback</system:String>
<system:String x:Key="ErrorFeedbackLinkText">Create a GitHub issue</system:String>
<system:String x:Key="ErrorQqGroup">QQ Group</system:String>
<system:String x:Key="ErrorQqGroupLinkText">704746719</system:String>
<system:String x:Key="InitializationError">Initialization error!</system:String>
<system:String x:Key="ResolutionNotSupported">Emulator resolution not supported, please set at least 720P with 16:9 ratio</system:String>
<system:String x:Key="ResolutionAcquisitionFailure">fails to be obtain emulator resolution . Please restart computer or consider try other emulator</system:String>

View File

@@ -345,6 +345,11 @@
<!-- AsstProxy -->
<system:String x:Key="UnknownAbnormal">リソースファイルが破損しています。完全なパッケージを再度ダウンロードしてください</system:String>
<system:String x:Key="Error">エラー</system:String>
<system:String x:Key="ErrorDetails">情報</system:String>
<system:String x:Key="ErrorFeedback">Feedback</system:String>
<system:String x:Key="ErrorFeedbackLinkText">Create a GitHub issue</system:String>
<system:String x:Key="ErrorQqGroup">QQ Group</system:String>
<system:String x:Key="ErrorQqGroupLinkText">704746719</system:String>
<system:String x:Key="InitializationError">初期化エラー!</system:String>
<system:String x:Key="ResolutionNotSupported">エミュレータの解像度はサポートされていません。アスペクト比169で、720p以上に設定してください</system:String>
<system:String x:Key="ResolutionAcquisitionFailure">エミュレータの解像度を取得できませんでした。コンピュータを再起動するか、エミュレータを変更してから再試行することをお勧めします</system:String>

View File

@@ -331,6 +331,11 @@
<!-- AsstProxy -->
<system:String x:Key="UnknownAbnormal">리소스가 손상되었습니다. 전체 패키지를 다시 다운로드하십시오.</system:String>
<system:String x:Key="Error">오류</system:String>
<system:String x:Key="ErrorDetails">신용</system:String>
<system:String x:Key="ErrorFeedback">Feedback</system:String>
<system:String x:Key="ErrorFeedbackLinkText">Create a GitHub issue</system:String>
<system:String x:Key="ErrorQqGroup">QQ Group</system:String>
<system:String x:Key="ErrorQqGroupLinkText">704746719</system:String>
<system:String x:Key="InitializationError">초기화 오류!</system:String>
<system:String x:Key="ResolutionNotSupported">에뮬레이터 해상도가 지원되지 않습니다. 해상도를 720p 이상, 16:9 으로 설정해주세요.</system:String>
<system:String x:Key="ResolutionAcquisitionFailure">에뮬레이터 해상도를 가져오지 못했습니다. 컴퓨터를 다시 시작하거나 에뮬레이터를 변경한 후 다시 시도하는 것이 좋습니다.</system:String>

View File

@@ -331,6 +331,11 @@
<!-- AsstProxy -->
<system:String x:Key="UnknownAbnormal">🍻🍺🍺🍺🍻🍸🕺🍺🍸🕺🍺🍻🕺🕺🍺🍸🕺🍻🍻🍺</system:String>
<system:String x:Key="Error">🍻🍻🕺</system:String>
<system:String x:Key="ErrorDetails">🍻🍷🍻</system:String>
<system:String x:Key="ErrorFeedback">🕺🕺🕺</system:String>
<system:String x:Key="ErrorFeedbackLinkText">🍺🍻🕺🍺🍸🍻🕺🕺🍸🍻🍷🕺🍷🍻🍺🍷🍻🍷🍷🍻🍺🍸🍷🍷🍻🍻🍸</system:String>
<system:String x:Key="ErrorQqGroup">🍺🍻🕺🍸🍻</system:String>
<system:String x:Key="ErrorQqGroupLinkText">🍸🍷🍻💃🍺🍻🕺🍺🍻🍻</system:String>
<system:String x:Key="InitializationError">🍻🍺🍺🕺🍺🍸🍸</system:String>
<system:String x:Key="ResolutionNotSupported">🍻🍻🍷🍷🍻🍸🍺🍸🍸🍸🕺💃🍷🍻🍺🍻🍺🍻🍻🍷🍺🍸🍻🍷🕺🍷🍻🍺🍷🍻🍷🍻🍻🍸🍷</system:String>
<system:String x:Key="ResolutionAcquisitionFailure">🍺🍸🍷🍻🍻🍺🍸💃🍷🍸🍸🍸🍷🍸💃🍷🍸🍸🍻🍷🍸🕺🍻🍸🍸🕺🍷🍺🍷🕺</system:String>

View File

@@ -331,6 +331,11 @@
<!-- AsstProxy -->
<system:String x:Key="UnknownAbnormal">资源损坏,请重新下载完整安装包</system:String>
<system:String x:Key="Error">错误</system:String>
<system:String x:Key="ErrorDetails">信息</system:String>
<system:String x:Key="ErrorFeedback">反馈问题</system:String>
<system:String x:Key="ErrorFeedbackLinkText">创建 GitHub issue</system:String>
<system:String x:Key="ErrorQqGroup">QQ群</system:String>
<system:String x:Key="ErrorQqGroupLinkText">704746719</system:String>
<system:String x:Key="InitializationError">初始化错误!</system:String>
<system:String x:Key="ResolutionNotSupported">模拟器分辨率不支持,请设置为 720p 或更高,且为 16:9 比例</system:String>
<system:String x:Key="ResolutionAcquisitionFailure">模拟器分辨率获取失败,建议重启电脑,或更换模拟器后再次尝试</system:String>

View File

@@ -331,6 +331,11 @@
<!-- AsstProxy -->
<system:String x:Key="UnknownAbnormal">資源損毀,請重新下載完整安裝包</system:String>
<system:String x:Key="Error">錯誤</system:String>
<system:String x:Key="ErrorDetails">信息</system:String>
<system:String x:Key="ErrorFeedback">反饋問題</system:String>
<system:String x:Key="ErrorFeedbackLinkText">創建 GitHub issue</system:String>
<system:String x:Key="ErrorQqGroup">QQ群</system:String>
<system:String x:Key="ErrorQqGroupLinkText">704746719</system:String>
<system:String x:Key="InitializationError">初始化錯誤!</system:String>
<system:String x:Key="ResolutionNotSupported">模擬器解析度不支持,請設定為 720p 或更高,且為 16:9 比例</system:String>
<system:String x:Key="ResolutionAcquisitionFailure">模擬器解析度獲取失敗,建議重啟電腦,或更換模擬器後再次嘗試</system:String>

View File

@@ -0,0 +1,37 @@
<Window x:Class="MeoAsstGui.Views.ErrorView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MeoAsstGui"
mc:Ignorable="d"
Title="{DynamicResource UnknownErrorOccurs}" Height="400" Width="628" WindowStyle="SingleBorderWindow" ResizeMode="NoResize" Background="#FFE6E6E6" WindowStartupLocation="CenterScreen" Topmost="True">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0*"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Grid.ColumnSpan="2" Margin="0,0,512,270" Width="50" Source="/Resources/Images/Warning.png" Stretch="Uniform" />
<TextBlock Grid.ColumnSpan="2" Grid.Column="0" Text="{DynamicResource Error}" HorizontalAlignment="Left" Margin="115,20,0,0" VerticalAlignment="Top" FontWeight="Bold" />
<TextBox Grid.ColumnSpan="2" Grid.Column="0" x:Name="Error" HorizontalAlignment="Left" TextWrapping="Wrap" Background="#FFE6E6E6" BorderThickness="0" Padding="0" Text="{DynamicResource UnknownErrorOccurs}" Margin="140,45,0,0" VerticalAlignment="Top" MaxHeight="40" Width="455" />
<TextBlock Grid.ColumnSpan="2" Grid.Column="0" Text="{DynamicResource ErrorDetails}" HorizontalAlignment="Left" Margin="115,95,0,0" VerticalAlignment="Top" FontWeight="Bold"/>
<TextBox Grid.ColumnSpan="2" Grid.Column="0" x:Name="ErrorDetails" HorizontalAlignment="Left" TextWrapping="Wrap" Background="#FFE6E6E6" BorderThickness="0" Padding="0" Text="{DynamicResource UnknownErrorOccurs}" Margin="140,120,0,0" VerticalAlignment="Top" MaxHeight="150" Width="455" />
<TextBlock Grid.ColumnSpan="2" Grid.Column="0" Text="{DynamicResource ErrorFeedback}" HorizontalAlignment="Left" Margin="376,300,0,0" VerticalAlignment="Top"/>
<TextBlock Grid.ColumnSpan="2" Grid.Column="0" HorizontalAlignment="Left" Margin="466,300,0,0" VerticalAlignment="Top" Width="129" Height="23">
<Hyperlink Name="LinkToCreateGitHubIssue" Click="LinkToCreateGitHubIssue_OnClick" NavigateUri="https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/new/choose" FontSize="10.667">
<Run Text="{DynamicResource ErrorFeedbackLinkText}" />
</Hyperlink>
</TextBlock>
<TextBlock x:Name="ErrorQqGroup" Grid.ColumnSpan="2" Grid.Column="0" Text="{DynamicResource ErrorQqGroup}" HorizontalAlignment="Left" Margin="376,326,0,0" VerticalAlignment="Top"/>
<TextBlock x:Name="ErrorQqGroupLink" Grid.ColumnSpan="2" Grid.Column="0" HorizontalAlignment="Left" Margin="466,326,0,0" VerticalAlignment="Top" FontSize="10.667" Width="71">
<Hyperlink Name="LinkToJoinQqGroup" Click="LinkToJoinQqGroup_OnClick" NavigateUri="https://jq.qq.com/?k=PYoCP2lS" FontSize="10.667">
<Run Text="{DynamicResource ErrorQqGroupLinkText}" />
</Hyperlink>
</TextBlock>
</Grid>
</Window>

View File

@@ -0,0 +1,61 @@
using System;
using System.Diagnostics;
using System.Windows;
using Application = System.Windows.Forms.Application;
namespace MeoAsstGui.Views
{
/// <summary>
/// ErrorView.xaml 的交互逻辑
/// </summary>
public partial class ErrorView : Window
{
protected bool ShouldExit { get; set; }
public ErrorView()
{
InitializeComponent();
}
public ErrorView(string error, string details, bool shouldExit)
{
InitializeComponent();
Title = error;
Error.Text = error;
ErrorDetails.Text = details;
ShouldExit = shouldExit;
var isZhCn = ViewStatusStorage.Get("GUI.Localization", Localization.DefaultLanguage) == "zh-cn";
ErrorQqGroup.Visibility = isZhCn ? Visibility.Visible : Visibility.Hidden;
ErrorQqGroupLink.Visibility = isZhCn ? Visibility.Visible : Visibility.Hidden;
}
public void Pause()
{
while (ShouldExit)
{
Application.DoEvents();
}
}
protected override void OnClosed(EventArgs e)
{
if (ShouldExit)
{
Environment.Exit(0);
}
base.OnClosed(e);
}
private void LinkToCreateGitHubIssue_OnClick(object sender, RoutedEventArgs e)
{
Process.Start(LinkToJoinQqGroup.NavigateUri.ToString());
}
private void LinkToJoinQqGroup_OnClick(object sender, RoutedEventArgs e)
{
Process.Start(LinkToJoinQqGroup.NavigateUri.ToString());
}
}
}