Bugfixes
This commit is contained in:
@@ -1,8 +1,13 @@
|
||||
using System;
|
||||
using AsusFanControl.Domain.services;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System.Threading;
|
||||
using System.Configuration;
|
||||
using System.Text;
|
||||
|
||||
namespace AsusFanControlGUI
|
||||
{
|
||||
@@ -16,7 +21,142 @@ namespace AsusFanControlGUI
|
||||
{
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new Form1());
|
||||
|
||||
// Subscribe to unhandled exception events
|
||||
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
|
||||
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
|
||||
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
|
||||
|
||||
// Simulate an unhandled exception on the UI thread
|
||||
//throw new InvalidOperationException("Simulated UI thread exception");
|
||||
|
||||
// Configure the DI container
|
||||
var serviceProvider = ConfigureServices();
|
||||
|
||||
// Resolve the main form and run the application
|
||||
using (var form = serviceProvider.GetRequiredService<Form1>())
|
||||
{
|
||||
Application.Run(form);
|
||||
}
|
||||
}
|
||||
|
||||
private static IServiceProvider ConfigureServices()
|
||||
{
|
||||
var services = new ServiceCollection();
|
||||
|
||||
// Register domain layer
|
||||
services.AddSingleton<FanCurve>();
|
||||
|
||||
// Register application layer
|
||||
|
||||
// Register infrastructure layer
|
||||
|
||||
// Register presentation layer
|
||||
services.AddSingleton<Form1>();
|
||||
|
||||
return services.BuildServiceProvider();
|
||||
}
|
||||
|
||||
static string GetApplicationSettings()
|
||||
{
|
||||
StringBuilder settings = new StringBuilder();
|
||||
foreach (SettingsProperty property in Properties.Settings.Default.Properties)
|
||||
{
|
||||
settings.AppendLine($"{property.Name}: {Properties.Settings.Default[property.Name]}");
|
||||
}
|
||||
return settings.ToString();
|
||||
}
|
||||
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
|
||||
{
|
||||
ShowErrorDialog(e.Exception);
|
||||
}
|
||||
|
||||
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
|
||||
{
|
||||
ShowErrorDialog(e.ExceptionObject as Exception);
|
||||
}
|
||||
|
||||
static void ShowErrorDialog(Exception ex)
|
||||
{
|
||||
// Get the current state of application settings
|
||||
string settings = GetApplicationSettings();
|
||||
|
||||
// Build the message
|
||||
string message = $"An error occured, please try restarting the application.\n\n" +
|
||||
"If the error persists then create a GitHub issue at:\n" +
|
||||
"https://github.com/Darren80/AsusFanControlEnhanced/issues if one does not already exist \n\n" +
|
||||
$"Stack Trace:\n{ex.StackTrace}\n\n" +
|
||||
$"Application Settings:\n{settings}\n\n" +
|
||||
$"Error Message:\n{ex.Message}\n\n";
|
||||
|
||||
// Create a custom form to display the error message with scroll bars
|
||||
using (var form = new Form())
|
||||
{
|
||||
form.Text = "Unhandled Exception - AsusFanControlEnhanced";
|
||||
form.Size = new System.Drawing.Size(600, 400);
|
||||
form.StartPosition = FormStartPosition.CenterScreen;
|
||||
//form.Icon = Properties.Resources.ResourceManager.GetObject("AppIcon") as System.Drawing.Icon;
|
||||
|
||||
// Add a RichTextBox to display the message with scroll bars
|
||||
var textBox = new RichTextBox
|
||||
{
|
||||
Text = message,
|
||||
ReadOnly = true,
|
||||
Dock = DockStyle.Fill,
|
||||
ScrollBars = RichTextBoxScrollBars.Vertical,
|
||||
Font = new System.Drawing.Font("Consolas", 9.75f) // Use a monospaced font for better readability
|
||||
};
|
||||
|
||||
// Add Restart and Exit buttons
|
||||
var restartButton = new Button
|
||||
{
|
||||
Text = "Restart",
|
||||
DialogResult = DialogResult.Yes,
|
||||
Dock = DockStyle.Bottom
|
||||
};
|
||||
|
||||
var exitButton = new Button
|
||||
{
|
||||
Text = "Exit",
|
||||
DialogResult = DialogResult.No,
|
||||
Dock = DockStyle.Bottom
|
||||
};
|
||||
|
||||
// Add controls to the form
|
||||
form.Controls.Add(textBox);
|
||||
form.Controls.Add(restartButton);
|
||||
form.Controls.Add(exitButton);
|
||||
|
||||
// Handle button clicks
|
||||
form.AcceptButton = restartButton;
|
||||
form.CancelButton = exitButton;
|
||||
|
||||
// Show the form and handle the result
|
||||
DialogResult result = form.ShowDialog();
|
||||
|
||||
if (result == DialogResult.Yes)
|
||||
{
|
||||
// Restart the application
|
||||
RestartApplication();
|
||||
}
|
||||
else if (result == DialogResult.No)
|
||||
{
|
||||
// Exit the application
|
||||
Environment.Exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void RestartApplication()
|
||||
{
|
||||
// Reset application properties
|
||||
Properties.Settings.Default.Reset();
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
// Restart the application
|
||||
string applicationPath = Application.ExecutablePath;
|
||||
System.Diagnostics.Process.Start(applicationPath);
|
||||
Environment.Exit(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user