From 3e44b899dc2ed39ecf697634bbdca6bfb51e09b7 Mon Sep 17 00:00:00 2001 From: chinboy Date: Mon, 22 Dec 2025 17:50:50 +0800 Subject: [PATCH] Fix upload thread bug --- build/Version.props | 2 +- .../Net/FileUploadScheduler.cs | 8 +++++--- src/AtomUI.Desktop.Controls/Upload/Upload.cs | 18 ++++++++++-------- .../Upload/UploadDefaultDropArea.cs | 1 + 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/build/Version.props b/build/Version.props index eae303079..d77051e0e 100644 --- a/build/Version.props +++ b/build/Version.props @@ -1,7 +1,7 @@ $(NoWarn);CS7035 - 11.3.9 + 11.3.10 5.1.3-build.3 5.1.3-build.3 diff --git a/src/AtomUI.Controls.Shared/Net/FileUploadScheduler.cs b/src/AtomUI.Controls.Shared/Net/FileUploadScheduler.cs index c1d1e6457..f8ad85085 100644 --- a/src/AtomUI.Controls.Shared/Net/FileUploadScheduler.cs +++ b/src/AtomUI.Controls.Shared/Net/FileUploadScheduler.cs @@ -57,8 +57,11 @@ internal class FileUploadScheduler : IFileUploadScheduler var progress = new Progress(report => { - task.Progress = report.Percentage; - task.UploadProgressHandler?.Invoke(task.Id, task.UploadFileInfo, task.Progress); + Dispatcher.UIThread.InvokeAsync(() => + { + task.Progress = report.Percentage; + task.UploadProgressHandler?.Invoke(task.Id, task.UploadFileInfo, task.Progress); + }); }); _ = Task.Run(async () => @@ -66,7 +69,6 @@ internal class FileUploadScheduler : IFileUploadScheduler FileUploadResult? result = null; try { - task.Status = FileUploadStatus.Uploading; result = await _transport.UploadAsync( task.UploadFileInfo, task.Context, diff --git a/src/AtomUI.Desktop.Controls/Upload/Upload.cs b/src/AtomUI.Desktop.Controls/Upload/Upload.cs index 7bb72786b..820ad4c2b 100644 --- a/src/AtomUI.Desktop.Controls/Upload/Upload.cs +++ b/src/AtomUI.Desktop.Controls/Upload/Upload.cs @@ -312,8 +312,6 @@ public class Upload : ContentControl, IMotionAwareControl, IControlSharedTokenRe uploadTaskInfo.IsImageFile = IsImageFile(uploadFile); uploadTaskInfo.UploadTask = task; uploadTaskInfo.FilePath = uploadFile.FilePath; - - _allTaskList.Add(uploadTaskInfo); if (TaskInfoList.Count > 0 && TaskInfoList.Count == MaxCount) { @@ -325,6 +323,7 @@ public class Upload : ContentControl, IMotionAwareControl, IControlSharedTokenRe await CancelAllUploadTaskAsync(); } + _allTaskList.Add(uploadTaskInfo); UploadTaskCreated?.Invoke(this, new UploadTaskCreatedEventArgs(task.Id, uploadFile)); var aboutToSchedulingEvent = new UploadTaskAboutToSchedulingEventArgs(task.Id, uploadFile); UploadTaskAboutToScheduling?.Invoke(this, aboutToSchedulingEvent); @@ -361,11 +360,14 @@ public class Upload : ContentControl, IMotionAwareControl, IControlSharedTokenRe private void HandleUploadProgressChanged(Guid taskId, UploadFileInfo fileInfo, double progress) { - var taskInfo = TaskInfoList.FirstOrDefault(x => x.TaskId == taskId); + var taskInfo = _allTaskList.FirstOrDefault(x => x.TaskId == taskId); if (taskInfo != null) { SetCurrentValue(IsTaskRunningProperty, true); - taskInfo.Status = FileUploadStatus.Uploading; + if (taskInfo.Status == FileUploadStatus.Pending) + { + taskInfo.Status = FileUploadStatus.Uploading; + } taskInfo.Progress = progress; UploadTaskProgress?.Invoke(this, new UploadTaskProgressEventArgs(taskId, fileInfo, progress)); } @@ -373,7 +375,7 @@ public class Upload : ContentControl, IMotionAwareControl, IControlSharedTokenRe private void HandleUploadCompleted(Guid taskId, UploadFileInfo uploadFileInfo, FileUploadResult result) { - var taskInfo = TaskInfoList.FirstOrDefault(x => x.TaskId == taskId); + var taskInfo = _allTaskList.FirstOrDefault(x => x.TaskId == taskId); if (taskInfo != null) { taskInfo.Status = FileUploadStatus.Success; @@ -384,7 +386,7 @@ public class Upload : ContentControl, IMotionAwareControl, IControlSharedTokenRe private void HandleUploadFailed(Guid taskId, UploadFileInfo uploadFileInfo, FileUploadResult result) { - var taskInfo = TaskInfoList.FirstOrDefault(x => x.TaskId == taskId); + var taskInfo = _allTaskList.FirstOrDefault(x => x.TaskId == taskId); if (taskInfo != null) { taskInfo.Status = FileUploadStatus.Failed; @@ -396,7 +398,7 @@ public class Upload : ContentControl, IMotionAwareControl, IControlSharedTokenRe private void HandleUploadCancelled(Guid taskId, UploadFileInfo uploadFileInfo, FileUploadResult result) { - var taskInfo = TaskInfoList.FirstOrDefault(x => x.TaskId == taskId); + var taskInfo = _allTaskList.FirstOrDefault(x => x.TaskId == taskId); if (taskInfo != null) { taskInfo.Status = FileUploadStatus.Cancelled; @@ -409,7 +411,7 @@ public class Upload : ContentControl, IMotionAwareControl, IControlSharedTokenRe private void CheckTaskRunning() { var isTaskRunning = false; - foreach (var uploadTaskInfo in TaskInfoList) + foreach (var uploadTaskInfo in _allTaskList) { if (uploadTaskInfo.Status == FileUploadStatus.Uploading) { diff --git a/src/AtomUI.Desktop.Controls/Upload/UploadDefaultDropArea.cs b/src/AtomUI.Desktop.Controls/Upload/UploadDefaultDropArea.cs index 4d49cd67d..27d347724 100644 --- a/src/AtomUI.Desktop.Controls/Upload/UploadDefaultDropArea.cs +++ b/src/AtomUI.Desktop.Controls/Upload/UploadDefaultDropArea.cs @@ -92,6 +92,7 @@ public class UploadDefaultDropArea : TemplatedControl, IMotionAwareControl { area.HandleDrop(args); }); + } private void HandleDrop(DragEventArgs e)