diff --git a/src/SharpIDE.Application/Features/Events/GlobalEvents.cs b/src/SharpIDE.Application/Features/Events/GlobalEvents.cs new file mode 100644 index 0000000..c096c65 --- /dev/null +++ b/src/SharpIDE.Application/Features/Events/GlobalEvents.cs @@ -0,0 +1,7 @@ +namespace SharpIDE.Application.Features.Events; + +public static class GlobalEvents +{ + public static event Func ProjectsRunningChanged = () => Task.CompletedTask; + public static void InvokeProjectsRunningChanged() => ProjectsRunningChanged?.Invoke(); +} diff --git a/src/SharpIDE.Application/Features/Run/RunService.cs b/src/SharpIDE.Application/Features/Run/RunService.cs index 56489db..4661557 100644 --- a/src/SharpIDE.Application/Features/Run/RunService.cs +++ b/src/SharpIDE.Application/Features/Run/RunService.cs @@ -2,6 +2,7 @@ using Ardalis.GuardClauses; using AsyncReadProcess.Common; using AsyncReadProcess; +using SharpIDE.Application.Features.Events; using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence; namespace SharpIDE.Application.Features.Run; @@ -39,8 +40,11 @@ public class RunService } }); - + project.Running = true; + GlobalEvents.InvokeProjectsRunningChanged(); await process.WaitForExitAsync(); + project.Running = false; + GlobalEvents.InvokeProjectsRunningChanged(); Console.WriteLine("Project ran successfully."); } diff --git a/src/SharpIDE.Photino/Components/RunPopover.razor b/src/SharpIDE.Photino/Components/RunPopover.razor index fd09bd6..f851deb 100644 --- a/src/SharpIDE.Photino/Components/RunPopover.razor +++ b/src/SharpIDE.Photino/Components/RunPopover.razor @@ -1,4 +1,7 @@ -@using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence +@using SharpIDE.Application.Features.Events +@using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence + +@implements IDisposable
@@ -16,7 +19,7 @@ @project.Name - + @@ -45,6 +48,13 @@ var tasks = SolutionModel.AllProjects.Select(p => p.MsBuildEvaluationProjectTask).ToList(); await Task.WhenAll(tasks); _ready = true; + GlobalEvents.ProjectsRunningChanged += OnProjectsRunningChanged; } + private async Task OnProjectsRunningChanged() + { + await InvokeAsync(StateHasChanged); + } + + public void Dispose() => GlobalEvents.ProjectsRunningChanged -= OnProjectsRunningChanged; }