【C#】一個Loading窗體載入與銷燬的方法

是阿夢呀 發表於 2021-05-03
C#

寫在前面

Minecraft Command Editor 2跳票了近兩年的時間(對不起!!)。2021年2月,我重啟了MCE專案,並正式命名為Minecraft Command Editor 2021,感謝大家三年來的支援,鞠躬!

在MCE專案中,Main窗體載入前,會進行資料庫和其他配置的載入,在這個階段,因此,在載入的空檔期載入一個Loading視窗,有效的解決了從視覺上程式載入慢的問題。今天我們來說一個比較好的Loading窗體載入與銷燬的方法。


一個Loading窗體載入與銷燬的方法

首先我們來定義一個Form類:

namespace Minecraft_Command_Editor
{
	partial class Loading{}		// Loading Form
	partial class Main{}		// Main Form
	partial class Settings{}	// Settings Form
	partial class About{}		// About Form
}

在Program類中Main函式中插入:

Loading loading = new Loading();	// Creates the Loading object.
loading.ShowDialog();			// Shows the Loading Form as a modal dialog box.
if (loading.Visible == false)
{
	Application.Run(new Main());	// Begins running a standard application message loop on the current thread, and makes the Main form visible.
}

最後Program類看起來長這樣:

static class Program
{
	[STAThread]
	static void Main()
	{
		Application.SetHighDpiMode(HighDpiMode.SystemAware);
		Application.EnableVisualStyles();
		Application.SetCompatibleTextRenderingDefault(false);

		Loading loading = new Loading();	// Creates the Loading object.
		loading.ShowDialog();			// Shows the Loading Form as a modal dialog box.
		if (loading.Visible == false)
		{
			Application.Run(new Main());	// Begins running a standard application message loop on the current thread, and makes the Main form visible.
		}
	}
}

這是一個單執行緒程式的Loading窗體載入方法,想要銷燬Loading進入到Main窗體,則需要在Loading類的適當位置加入銷燬程式碼即可。
例如:

using System;
using System.Windows.Forms;
using Functions.System;		// Custom namespace
namespace Minecraft_Command_Editor
{
	public partial class Loading : Form
	{
		private void Loading_Shown(object sender, EventArgs e)
		{
			Process.ThreadDelay(512);	// Thread delay 512ms.
			this.Close();				// Close Form.
		}
	}
}

寫在後面

一年前,我在知乎也分享了一個Loading窗體載入的方法,方法不同但思路是一樣的。
實際上,關於Main窗體的前置載入方法有很多,大家選擇自己喜歡的即可。