VideoStudy/VideoStudy.App/Program.cs
2026-05-15 21:18:55 -03:00

59 lines
1.7 KiB
C#

using System.Threading;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Photino.NET;
using VideoStudy.UI;
namespace VideoStudy.App;
class Program
{
[STAThread]
static void Main(string[] args)
{
const string appUrl = "http://localhost:5002";
var serverReady = new ManualResetEventSlim(false);
// Start Blazor Server in background thread
var serverThread = new Thread(() =>
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
builder.Services.AddVideoStudyUI();
builder.Services.AddScoped(_ => new HttpClient
{
BaseAddress = new Uri("http://localhost:5000"),
Timeout = TimeSpan.FromMinutes(10)
});
var app = builder.Build();
app.UseStaticFiles();
app.UseAntiforgery();
app.MapRazorComponents<AppShell>()
.AddInteractiveServerRenderMode()
.AddAdditionalAssemblies(typeof(Routes).Assembly);
app.Lifetime.ApplicationStarted.Register(() => serverReady.Set());
app.Run(appUrl);
});
serverThread.IsBackground = true;
serverThread.Start();
// Wait for Kestrel to be ready (max 15s)
serverReady.Wait(TimeSpan.FromSeconds(15));
// Open native window pointing to local server
var window = new PhotinoWindow()
.SetTitle("VideoStudy")
.SetSize(1280, 800)
.SetDevToolsEnabled(true)
.Center()
.Load(new Uri(appUrl));
window.WaitForClose();
}
}