59 lines
1.7 KiB
C#
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();
|
|
}
|
|
}
|