У меня есть форма ( ScreenSplash.cs ) которая показывает при запуске текст и проверяет некое bool
значение.
Есть вторая форма (winforms.cs) которую нужно показать если ScreenSplash дал результат bool == true
Так же имеется вот такой вот класс может его можно как-то реализовать в моём вопросе?
using System;
using System.Threading;
using System.Windows.Forms;
namespace WindowsFormsApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
using (var splash = new Splash<Form2>())
{
Thread.Sleep(5000);
}
}
}
class Splash<T> : IDisposable where T : Form, new()
{
private Form mForm;
private Thread mThread;
public Splash()
{
this.mForm = new T();
this.mThread = new Thread(new ThreadStart(this.Func));
this.mThread.SetApartmentState(ApartmentState.STA);
this.mThread.Start();
}
private void Func()
{
Application.Run(this.mForm);
}
private delegate void CloseDelegate();
public void Dispose()
{
if (this.mForm.InvokeRequired)
{
CloseDelegate d = this.mForm.Close;
this.mForm.Invoke(d);
}
else
{
this.mForm.Close();
}
this.mForm.Dispose();
}
}
}
Реализовал пока что таким способом:
public partial class SplashFrm : Form
{
Timer timer1 = new Timer();
public SplashFrm() => this.InitializeComponent();
private void SplashFrm_Load(object sender, EventArgs e)
{
this.timer1.Interval = 3000;
this.timer1.Tick += new EventHandler(this.Inizialize);
this.timer1.Start();
}
private void Inizialize(object sender, EventArgs e)
{
bool testing = false;
if (testing == true)
{
this.timer1.Stop();
if (!this.timer1.Enabled)
{
var frm = new WinForm();
frm.Show();
this.Hide();
}
}
else
{
this.timer1.Stop();
MessageBox.Show("Форма не равна true");
Application.Exit();
}
}
}
Покажу на примере точки входа Main()
, файл Program.cs
. В качестве дополнения посмотрите туториалы по созданию загрузочного экрана. Например, такое или такое.
static class Program
{
static Thread threadShowSplashScreen;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// Создайте поток (будет показывать форму загрузки)
Thread threadShowSplashScreen = new Thread(ShowSplashScreen)
{
Name = "SplashScreen",
Priority = ThreadPriority.Lowest,
IsBackground = true
};
// Запустите поток
threadShowSplashScreen.Start();
// Делайте что-то (форма загрузки уже отображается)
MainForm mainForm = new MainForm();
MainPresenter presenter = new MainPresenter(mainForm);
// Закройте поток (закрыть форму загрузки)
threadShowSplashScreen.Abort();
// Запустите основную форму
// или что вам нужно по условию
Application.Run(mainForm);
}
static void ShowSplashScreen()
{
using(SplashScreen ss = new SplashScreen())
{
ss.ShowDialog();
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Дана MySQL БД для хранения анкет и результатов их заполнения
Можно ли использовать модули Symfony для функционального тестирования вне фреймворка, если да, то где можно почитать, как всё это настроитьИли...