67 lines
1.7 KiB
Plaintext
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();
|
|
}
|
|
}
|