using Avalonia; using System; using Microsoft.Extensions.Configuration; using MarketData.Configuration; using MarketData; using System.Diagnostics; namespace PortfolioManager; sealed class Program { // Initialization code. Don't use any Avalonia, third-party APIs or any // SynchronizationContext-reliant code before AppMain is called: things aren't initialized // yet and stuff might break. [STAThread] public static void Main(string[] args) { MDTrace.LogLevel = LogLevel.VERBOSE; String strLogFile = "portfolio_manager.log"; Trace.Listeners.Add(new TextWriterTraceListener(strLogFile)); MDTrace.WriteLine(LogLevel.DEBUG, "[MAIN:STARTING]"); IConfigurationBuilder builder = new ConfigurationBuilder() .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); IConfigurationRoot configurationRoot = builder.Build(); GlobalConfig.Instance.Configuration = configurationRoot; // This call sets up configuration stuff so it needs to be first. try { BuildAvaloniaApp().StartWithClassicDesktopLifetime(args); } catch (Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG, exception.ToString()); } ProcessThreadCollection currentThreads = Process.GetCurrentProcess().Threads; if (null != currentThreads && 0 != currentThreads.Count) { MDTrace.WriteLine(LogLevel.DEBUG, $"There were {currentThreads.Count} threads still running at application shutdown."); } MDTrace.WriteLine(LogLevel.DEBUG, "[MAIN:EXIT]"); Environment.Exit(0); } // Avalonia configuration, don't remove; also used by visual designer. public static AppBuilder BuildAvaloniaApp() => AppBuilder.Configure() .UsePlatformDetect() .WithInterFont() .LogToTrace(); }