This repository has been archived on 2023-12-10. You can view files and clone it, but cannot push or open issues or pull requests.
PainterlyUNO/Matrix App/forms/SplashScreen.cs

64 lines
1.8 KiB
C#

using System.Drawing;
using System.Threading;
using System.Windows.Forms;
namespace Matrix_App
{
public class SplashScreen : Form
{
//Delegate for cross thread call to close
private delegate void CloseDelegate();
//The type of form to be displayed as the splash screen.
private static SplashScreen? _splashForm;
private SplashScreen()
{
FormBorderStyle = FormBorderStyle.None;
Controls.Add(new Label()
{
Image = Properties.Resources.Pfüsikuh,
Size = new Size(Properties.Resources.Pfüsikuh.Width, Properties.Resources.Pfüsikuh.Height)
});
Size = new Size(Properties.Resources.Pfüsikuh.Width, Properties.Resources.Pfüsikuh.Height);
StartPosition = FormStartPosition.CenterScreen;
}
public static void ShowSplashScreen()
{
// Make sure it is only launched once.
if (_splashForm != null)
return;
_splashForm = new SplashScreen();
Thread thread = new Thread(ShowForm)
{
IsBackground = true, Name = "Splash screen management thread"
};
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
private static void ShowForm()
{
if (_splashForm != null) Application.Run(_splashForm);
}
public static void CloseForm()
{
_splashForm?.Invoke(new CloseDelegate(CloseFormInternal));
}
private static void CloseFormInternal()
{
if (_splashForm != null)
{
_splashForm.Close();
_splashForm = null;
}
}
}
}