add:软件启动动画

This commit is contained in:
2025-10-01 18:45:26 +08:00
parent 93022424b3
commit dfddec5586
3 changed files with 71 additions and 23 deletions
+20 -18
View File
@@ -80,7 +80,7 @@ namespace Ink_Canvas
DispatcherUnhandledException += App_DispatcherUnhandledException;
StartHeartbeatMonitor();
// 新增:初始化全局异常和进程结束处理
// 初始化全局异常和进程结束处理
InitializeCrashListeners();
// 仅在崩溃后操作为静默重启时才启动看门狗
@@ -96,7 +96,7 @@ namespace Ink_Canvas
Exit += App_Exit; // 注册退出事件
}
// 新增:配置TLS协议以支持Windows 7
// 配置TLS协议以支持Windows 7
private void ConfigureTlsForWindows7()
{
try
@@ -131,7 +131,7 @@ namespace Ink_Canvas
}
}
// 新增:初始化崩溃监听器
// 初始化崩溃监听器
private void InitializeCrashListeners()
{
if (crashListenersInitialized) return;
@@ -179,7 +179,7 @@ namespace Ink_Canvas
}
}
// 新增:动态加载WMI监控(避免直接引用System.Management
// 动态加载WMI监控
private void TrySetupWmiMonitoring()
{
try
@@ -232,7 +232,7 @@ namespace Ink_Canvas
}
}
// WMI事件处理方法(通过反射调用)
// WMI事件处理方法
private void WmiEventHandler(object sender, EventArgs e)
{
try
@@ -256,7 +256,7 @@ namespace Ink_Canvas
}
}
// 新增:Windows控制台控制处理程序
// Windows控制台控制处理程序
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate handler, bool add);
@@ -295,7 +295,7 @@ namespace Ink_Canvas
return false;
}
// 新增:系统会话结束事件处理
// 系统会话结束事件处理
private void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
{
string reason = e.Reason == SessionEndReasons.Logoff ? "用户注销" : "系统关机";
@@ -324,14 +324,14 @@ namespace Ink_Canvas
DeviceIdentifier.SaveUsageStatsOnShutdown();
}
// 新增:控制台取消事件处理
// 控制台取消事件处理
private void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
WriteCrashLog($"接收到控制台中断信号: {e.SpecialKey}");
e.Cancel = true; // 取消默认处理
}
// 新增:处理非UI线程的未处理异常
// 处理非UI线程的未处理异常
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
@@ -361,7 +361,7 @@ namespace Ink_Canvas
}
}
// 新增:处理进程退出事件
// 处理进程退出事件
private void CurrentDomain_ProcessExit(object sender, EventArgs e)
{
TimeSpan runDuration = DateTime.Now - appStartTime;
@@ -375,7 +375,7 @@ namespace Ink_Canvas
}
}
// 新增:格式化时间跨度
// 格式化时间跨度
private static string FormatTimeSpan(TimeSpan timeSpan)
{
if (timeSpan.TotalDays >= 1)
@@ -878,9 +878,11 @@ namespace Ink_Canvas
if (_isSplashScreenShown)
{
SetSplashMessage("启动完成!");
SetSplashProgress(100);
SetSplashProgress(500);
Task.Delay(500).ContinueWith(_ =>
// 延迟关闭启动画面,让用户看到完成消息
Task.Delay(800).ContinueWith(_ =>
{
Dispatcher.Invoke(() => CloseSplashScreen());
});
@@ -889,7 +891,7 @@ namespace Ink_Canvas
mainWindow.Show();
// 新增:注册.icstk文件关联
// 注册.icstk文件关联
try
{
LogHelper.WriteLogToFile("开始注册.icstk文件关联");
@@ -901,7 +903,7 @@ namespace Ink_Canvas
LogHelper.WriteLogToFile($"注册文件关联时出错: {ex.Message}", LogHelper.LogType.Error);
}
// 新增:启动IPC监听器
// 启动IPC监听器
try
{
LogHelper.WriteLogToFile("启动IPC监听器");
@@ -912,7 +914,7 @@ namespace Ink_Canvas
LogHelper.WriteLogToFile($"启动IPC监听器时出错: {ex.Message}", LogHelper.LogType.Error);
}
// 新增:Office注册表检测
// Office注册表检测
try
{
LogHelper.WriteLogToFile("开始Office注册表检测");
@@ -1051,7 +1053,7 @@ namespace Ink_Canvas
catch { }
}
// 新增:用于设置崩溃后操作类型
// 用于设置崩溃后操作类型
public enum CrashActionType
{
SilentRestart,
@@ -1113,7 +1115,7 @@ namespace Ink_Canvas
watchdogProcess = Process.Start(psi);
}
// 看门狗主逻辑(在 Main 函数或 App_Startup 入口前加判断)
// 看门狗主逻辑
public static void RunWatchdogIfNeeded()
{
var args = Environment.GetCommandLineArgs();
@@ -1160,7 +1162,7 @@ namespace Ink_Canvas
// 仅在软件内主动退出时关闭看门狗,并写入退出信号
try
{
// 新增:记录应用退出状态
// 记录应用退出状态
string exitType = IsAppExitByUser ? "用户主动退出" : "应用程序退出";
WriteCrashLog($"{exitType},退出代码: {e.ApplicationExitCode}");
+27 -3
View File
@@ -45,12 +45,36 @@
<!-- 进度条 -->
<ProgressBar x:Name="LoadingProgress"
Width="500"
Height="8"
Width="530"
Height="5"
Margin="0,-170,0,0"
Background="#40000000"
Foreground="#0078D4"
IsIndeterminate="True" />
IsIndeterminate="True">
<ProgressBar.Style>
<Style TargetType="ProgressBar">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ProgressBar">
<Grid>
<Border Name="PART_Track"
Background="{TemplateBinding Background}"
CornerRadius="4"/>
<Border Name="PART_Indicator"
Background="{TemplateBinding Foreground}"
CornerRadius="4"
HorizontalAlignment="Left">
<Border.RenderTransform>
<ScaleTransform ScaleX="1" ScaleY="1"/>
</Border.RenderTransform>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ProgressBar.Style>
</ProgressBar>
</StackPanel>
</Grid>
</Grid>
+24 -2
View File
@@ -2,6 +2,7 @@ using System;
using System.Reflection;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Animation;
using System.Windows.Threading;
@@ -91,8 +92,29 @@ namespace Ink_Canvas.Windows
{
Dispatcher.Invoke(() =>
{
LoadingProgress.IsIndeterminate = false;
LoadingProgress.Value = progress;
if (LoadingProgress.IsIndeterminate)
{
LoadingProgress.IsIndeterminate = false;
LoadingProgress.Value = 0;
}
// 创建平滑过渡动画
var animation = new DoubleAnimation
{
From = LoadingProgress.Value,
To = progress,
Duration = TimeSpan.FromMilliseconds(800),
EasingFunction = new CubicEase { EasingMode = EasingMode.EaseOut }
};
// 添加动画完成事件
animation.Completed += (s, e) =>
{
// 确保最终值正确设置
LoadingProgress.Value = progress;
};
LoadingProgress.BeginAnimation(ProgressBar.ValueProperty, animation);
});
}