修复bug和扩展功能

This commit is contained in:
zsyg
2025-07-05 19:08:44 +08:00
committed by GitHub
parent 5bb3886bc5
commit 08a11f025a
3 changed files with 93 additions and 40 deletions

View File

@@ -54,9 +54,23 @@ namespace AppStore
this.Padding = new Padding(10); this.Padding = new Padding(10);
// 异步初始化卡片路径和边框 // 异步初始化卡片路径和边框
// 预加载边框路径
Task.Run(() => { Task.Run(() => {
InitializeCardPath(); InitializeCardPath();
InitializeBorder(); InitializeBorder();
// 确保在主线程注册事件
this.Invoke((MethodInvoker)(() => {
this.Paint += (sender, e) => {
if (BorderCache.IsEmpty)
{
Task.Run(() => {
InitializeBorder();
this.Invoke((MethodInvoker)(() => this.Invalidate()));
});
}
};
}));
}); });
// 应用图标 - 添加null检查 // 应用图标 - 添加null检查
@@ -187,52 +201,58 @@ namespace AppStore
// 使用卡片尺寸作为缓存键 // 使用卡片尺寸作为缓存键
string cacheKey = $"{Width}_{Height}_10"; string cacheKey = $"{Width}_{Height}_10";
// 检查缓存中是否已有路径 // 双重检查锁模式确保线程安全
if (!BorderCache.TryGetValue(cacheKey, out var borderPath)) if (!BorderCache.TryGetValue(cacheKey, out var borderPath))
{ {
// 创建临时文件存储路径数据 lock (BorderCache)
string tempFile = Path.GetTempFileName();
try
{ {
// 配置C++程序启动参数 if (!BorderCache.TryGetValue(cacheKey, out borderPath))
ProcessStartInfo startInfo = new ProcessStartInfo
{ {
FileName = Path.Combine(Application.StartupPath, "resource", "border_renderer.exe"), // 创建临时文件存储路径数据
Arguments = $"{Width} {Height} 10 \"{tempFile}\"", // 传递宽高和圆角半径 string tempFile = Path.GetTempFileName();
UseShellExecute = false, // 不显示命令行窗口 try
CreateNoWindow = true // 静默运行
};
// 启动C++程序计算路径
using (var process = Process.Start(startInfo))
{
process.WaitForExit();
// 检查计算结果
if (process.ExitCode == 0 && File.Exists(tempFile))
{ {
// 读取C++程序生成的路径点 // 配置C++程序启动参数
var lines = File.ReadAllLines(tempFile); ProcessStartInfo startInfo = new ProcessStartInfo
PointF[] points = lines.Select(line => { {
var parts = line.Split(','); // 解析坐标点 FileName = Path.Combine(Application.StartupPath, "resource", "border_renderer.exe"),
return new PointF(float.Parse(parts[0]), float.Parse(parts[1])); Arguments = $"{Width} {Height} 10 \"{tempFile}\"", // 传递宽高和圆角半径
}).ToArray(); UseShellExecute = false, // 不显示命令行窗口
CreateNoWindow = true // 静默运行
};
// 创建GraphicsPath对象 // 启动C++程序计算路径
borderPath = new System.Drawing.Drawing2D.GraphicsPath(); using (var process = Process.Start(startInfo))
borderPath.AddLines(points); // 添加路径点 {
process.WaitForExit();
// 缓存路径对象 // 检查计算结果
BorderCache.TryAdd(cacheKey, borderPath); if (process.ExitCode == 0 && File.Exists(tempFile))
{
// 读取C++程序生成的路径点
var lines = File.ReadAllLines(tempFile);
PointF[] points = lines.Select(line => {
var parts = line.Split(','); // 解析坐标点
return new PointF(float.Parse(parts[0]), float.Parse(parts[1]));
}).ToArray();
// 创建GraphicsPath对象
borderPath = new System.Drawing.Drawing2D.GraphicsPath();
borderPath.AddLines(points); // 添加路径点
// 缓存路径对象
BorderCache.TryAdd(cacheKey, borderPath);
}
}
}
finally
{
// 确保临时文件被删除
if (File.Exists(tempFile))
{
File.Delete(tempFile);
}
} }
}
}
finally
{
// 确保临时文件被删除
if (File.Exists(tempFile))
{
File.Delete(tempFile);
} }
} }
} }
@@ -243,6 +263,12 @@ namespace AppStore
{ {
base.OnPaint(e); base.OnPaint(e);
// 确保边框已初始化
if (BorderCache.IsEmpty)
{
InitializeBorder();
}
// 绘制背景 // 绘制背景
using (var brush = new SolidBrush(this.BackColor)) { using (var brush = new SolidBrush(this.BackColor)) {
e.Graphics.FillRectangle(brush, this.ClientRectangle); e.Graphics.FillRectangle(brush, this.ClientRectangle);

View File

@@ -76,6 +76,10 @@ namespace AppStore
private static readonly Color DarkText = Color.FromArgb(240, 240, 240); private static readonly Color DarkText = Color.FromArgb(240, 240, 240);
private static readonly Color DarkButtonHover = Color.FromArgb(60, 60, 60); private static readonly Color DarkButtonHover = Color.FromArgb(60, 60, 60);
private static readonly Color DarkButtonActive = Color.FromArgb(70, 70, 70); private static readonly Color DarkButtonActive = Color.FromArgb(70, 70, 70);
private static readonly Color DarkBorder = Color.FromArgb(80, 80, 80);
// 浅色主题边框颜色
private static readonly Color LightBorder = Color.FromArgb(180, 180, 180);
public static event Action<ThemeMode> ThemeChanged = delegate {}; public static event Action<ThemeMode> ThemeChanged = delegate {};
@@ -108,6 +112,9 @@ namespace AppStore
public static Color ButtonActiveColor => public static Color ButtonActiveColor =>
_currentTheme == ThemeMode.Light ? LightButtonActive : DarkButtonActive; _currentTheme == ThemeMode.Light ? LightButtonActive : DarkButtonActive;
public static Color BorderColor =>
_currentTheme == ThemeMode.Light ? LightBorder : DarkBorder;
public static void ApplyTheme(Control control) public static void ApplyTheme(Control control)
{ {
ApplyThemeToControl(control); ApplyThemeToControl(control);

View File

@@ -75,5 +75,25 @@ namespace AppStore
} }
Log(warningMessage); Log(warningMessage);
} }
public static void LogDebug(string message, Exception? ex = null)
{
string debugMessage = $"DEBUG: {message}";
if (ex != null)
{
debugMessage += $"\nException: {ex}\nStackTrace: {ex.StackTrace}";
}
Log(debugMessage);
}
public static void LogTip(string message, Exception? ex = null)
{
string tipMessage = $"TIP: {message}";
if (ex != null)
{
tipMessage += $"\nException: {ex}\nStackTrace: {ex.StackTrace}";
}
Log(tipMessage);
}
} }
} }