Files
gpw_next/GPW.CORE.Shared/Components/ExecutionContextTest.razor
T

67 lines
1.7 KiB
Plaintext

@using Microsoft.AspNetCore.Components.Web
@using Microsoft.JSInterop
@implements IDisposable
@inject IJSRuntime JS
<div style="padding:1rem; border:1px solid #ccc; border-radius:8px; max-width:350px;">
<h4>Execution Context Test</h4>
<p>
<strong>Context:</strong>
<span style="color:@(IsWasm ? "green" : "blue")">
@(IsWasm ? "WASM (Client)" : "Server")
</span>
</p>
<p>
<strong>Time:</strong> @CurrentTime.ToLongTimeString()
</p>
<button class="btn btn-primary btn-sm" @onclick="DoClick">Test Me</button>
<p>@lblOut</p>
</div>
@code {
bool IsWasm;
DateTime CurrentTime = DateTime.Now;
private CancellationTokenSource? _cts;
private string lblOut = "";
protected override void OnInitialized()
{
IsWasm = OperatingSystem.IsBrowser();
_cts = new CancellationTokenSource();
// avvia loop asincrono che funziona sia in server che in WASM
_ = TimeLoopAsync(_cts.Token);
}
private async Task TimeLoopAsync(CancellationToken token)
{
try
{
while (!token.IsCancellationRequested)
{
CurrentTime = DateTime.Now;
await InvokeAsync(StateHasChanged);
await Task.Delay(1000, token);
}
}
catch (TaskCanceledException) { }
}
private Task DoClick()
{
lblOut = $"Clicked | {DateTime.Now:HH:mm:ss}";
// log su console browser se siamo in WASM
if (IsWasm)
_ = JS.InvokeVoidAsync("console.log", $"ExecutionContextTest DoClick at {DateTime.Now}");
return Task.CompletedTask;
}
public void Dispose()
{
_cts?.Cancel();
_cts?.Dispose();
}
}