refactor event to EventWrapper

This commit is contained in:
Matt Parker
2025-12-12 19:26:41 +10:00
parent b23febbcea
commit 253b3f0aac
4 changed files with 9 additions and 10 deletions

View File

@@ -109,7 +109,7 @@ public class RunService(ILogger<RunService> logger, RoslynAnalysis roslynAnalysi
GlobalEvents.Instance.StartedRunningProject.InvokeParallelFireAndForget(); GlobalEvents.Instance.StartedRunningProject.InvokeParallelFireAndForget();
GlobalEvents.Instance.ProjectStartedRunning.InvokeParallelFireAndForget(project); GlobalEvents.Instance.ProjectStartedRunning.InvokeParallelFireAndForget(project);
} }
project.InvokeProjectStartedRunning(); project.ProjectStartedRunning.InvokeParallelFireAndForget();
await process.WaitForExitAsync().WaitAsync(project.RunningCancellationTokenSource.Token).ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing); await process.WaitForExitAsync().WaitAsync(project.RunningCancellationTokenSource.Token).ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing);
if (project.RunningCancellationTokenSource.IsCancellationRequested) if (project.RunningCancellationTokenSource.IsCancellationRequested)
{ {
@@ -131,7 +131,7 @@ public class RunService(ILogger<RunService> logger, RoslynAnalysis roslynAnalysi
GlobalEvents.Instance.ProjectStoppedRunning.InvokeParallelFireAndForget(project); GlobalEvents.Instance.ProjectStoppedRunning.InvokeParallelFireAndForget(project);
} }
project.InvokeProjectStoppedRunning(); project.ProjectStoppedRunning.InvokeParallelFireAndForget();
_logger.LogInformation("Process for project {ProjectName} has exited", project.Name); _logger.LogInformation("Process for project {ProjectName} has exited", project.Name);
} }

View File

@@ -5,6 +5,7 @@ using Microsoft.CodeAnalysis;
using ObservableCollections; using ObservableCollections;
using SharpIDE.Application.Features.Analysis; using SharpIDE.Application.Features.Analysis;
using SharpIDE.Application.Features.Evaluation; using SharpIDE.Application.Features.Evaluation;
using SharpIDE.Application.Features.Events;
using Project = Microsoft.Build.Evaluation.Project; using Project = Microsoft.Build.Evaluation.Project;
namespace SharpIDE.Application.Features.SolutionDiscovery.VsPersistence; namespace SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
@@ -133,11 +134,9 @@ public class SharpIdeProjectModel : ISharpIdeNode, IExpandableSharpIdeNode, IChi
public bool OpenInRunPanel { get; set; } public bool OpenInRunPanel { get; set; }
public Channel<byte[]>? RunningOutputChannel { get; set; } public Channel<byte[]>? RunningOutputChannel { get; set; }
public event Func<Task> ProjectStartedRunning = () => Task.CompletedTask; public EventWrapper<Task> ProjectStartedRunning { get; } = new(() => Task.CompletedTask);
public void InvokeProjectStartedRunning() => ProjectStartedRunning.Invoke(); public EventWrapper<Task> ProjectStoppedRunning { get; } = new(() => Task.CompletedTask);
public event Func<Task> ProjectStoppedRunning = () => Task.CompletedTask;
public void InvokeProjectStoppedRunning() => ProjectStoppedRunning.Invoke();
public ObservableHashSet<SharpIdeDiagnostic> Diagnostics { get; internal set; } = []; public ObservableHashSet<SharpIdeDiagnostic> Diagnostics { get; internal set; } = [];
} }

View File

@@ -24,8 +24,8 @@ public partial class RunMenuItem : HBoxContainer
_stopButton.Pressed += OnStopButtonPressed; _stopButton.Pressed += OnStopButtonPressed;
_debugButton = GetNode<Button>("DebugButton"); _debugButton = GetNode<Button>("DebugButton");
_debugButton.Pressed += OnDebugButtonPressed; _debugButton.Pressed += OnDebugButtonPressed;
Project.ProjectStartedRunning += OnProjectStartedRunning; Project.ProjectStartedRunning.Subscribe(OnProjectStartedRunning);
Project.ProjectStoppedRunning += OnProjectStoppedRunning; Project.ProjectStoppedRunning.Subscribe(OnProjectStoppedRunning);
} }
private async Task OnProjectStoppedRunning() private async Task OnProjectStoppedRunning()

View File

@@ -17,7 +17,7 @@
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
Project.ProjectStartedRunning += OnProjectStartedRunning; Project.ProjectStartedRunning.Subscribe(OnProjectStartedRunning);
// This event may/will be raised before the component is initialized, so we call OnProjectStartedRunning directly, for the first render. // This event may/will be raised before the component is initialized, so we call OnProjectStartedRunning directly, for the first render.
await OnProjectStartedRunning(); await OnProjectStartedRunning();
} }
@@ -46,5 +46,5 @@
}); });
} }
public void Dispose() => Project.ProjectStartedRunning -= OnProjectStartedRunning; public void Dispose() => Project.ProjectStartedRunning.Unsubscribe(OnProjectStartedRunning);
} }