Fix upload thread bug

This commit is contained in:
chinboy
2025-12-22 17:50:50 +08:00
parent cb22b70bf8
commit 3e44b899dc
4 changed files with 17 additions and 12 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<NoWarn>$(NoWarn);CS7035</NoWarn>
<AvaloniaVersion>11.3.9</AvaloniaVersion>
<AvaloniaVersion>11.3.10</AvaloniaVersion>
<AtomUIVersion>5.1.3-build.3</AtomUIVersion>
<AtomUIGalleryVersion>5.1.3-build.3</AtomUIGalleryVersion>
</PropertyGroup>
@@ -57,8 +57,11 @@ internal class FileUploadScheduler : IFileUploadScheduler
var progress = new Progress<FileUploadProgress>(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,
+10 -8
View File
@@ -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)
{
@@ -92,6 +92,7 @@ public class UploadDefaultDropArea : TemplatedControl, IMotionAwareControl
{
area.HandleDrop(args);
});
}
private void HandleDrop(DragEventArgs e)