From 6c89086f6f78e808c4614c1802fd880166192f40 Mon Sep 17 00:00:00 2001 From: mhbalthasar Date: Mon, 18 Nov 2024 01:54:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=B7=A5=E7=A8=8B=E5=92=8C?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=B7=A5=E7=A8=8B=E5=A4=84=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E5=BC=82=E6=AD=A5=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 对于需要转换和烘焙参数的情况可能需要较长时间导致界面卡死。除了插件端优化逻辑外,编辑器端应避免阻塞gui --- TuneLab/UI/MainWindow/Editor/Editor.cs | 44 ++++++++++++++++---------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/TuneLab/UI/MainWindow/Editor/Editor.cs b/TuneLab/UI/MainWindow/Editor/Editor.cs index 308b6ad4..233461c3 100644 --- a/TuneLab/UI/MainWindow/Editor/Editor.cs +++ b/TuneLab/UI/MainWindow/Editor/Editor.cs @@ -387,14 +387,18 @@ async void SwitchProjectSafely(Action SwitchProject) void LoadProject(string path) { - if (!FormatsManager.Deserialize(path, out var info, out var error)) + Task.Run(() => { - Log.Error("Deserialize file error: " + error); - return; - } - - mDocument.SetProject(CreateProject(info), path); - RecentFilesManager.AddFile(path); + if (!FormatsManager.Deserialize(path, out var info, out var error)) + { + Log.Error("Deserialize file error: " + error); + return; + } + Dispatcher.UIThread.Post(() => { + mDocument.SetProject(CreateProject(info), path); + RecentFilesManager.AddFile(path); + }); + }); } Project CreateProject(ProjectInfo info) @@ -509,18 +513,24 @@ public async void ExportAs(string extension) var path = file?.TryGetLocalPath(); if (path == null) return; - - if (!FormatsManager.Serialize(mDocument.Project.GetInfo(), extension, out var stream, out var error)) + _ = Task.Run(() => { - Log.Error("Save file error: " + error); - return; - } + if (!FormatsManager.Serialize(mDocument.Project.GetInfo(), extension, out var stream, out var error)) + { + Log.Error("Save file error: " + error); + return; + } - using (FileStream fileStream = new FileStream(path, FileMode.Create)) - { - stream.CopyTo(fileStream); - } - RecentFilesManager.AddFile(path); + using (FileStream fileStream = new FileStream(path, FileMode.Create)) + { + stream.CopyTo(fileStream); + } + + Dispatcher.UIThread.Post(() => + { + RecentFilesManager.AddFile(path); + }); + }); } void SaveToFile(string path)