
在登录窗口展示之前,先弹出个正在加载的窗口,等待登录窗口初始化完了后,加载窗口关闭,登录窗口show出来,主要是用于登录方式比较多,加载设备比较慢的情况。效果如下(忽略我的桌面)
首先做一个加载Form,看个人喜好了,
public LoginLoading(string Msg = "请稍等..")
{
InitializeComponent();
l_message.Text = Msg;
pbi1.Location = new Point((this.Width - pbi1.Width) / 2, pbi1.Location.Y);
var data = Encoding.Default.GetBytes(Msg);
//字太多了就挡住转圈圈了
var y = data.Count() > 8 ? l_message.Location.Y + pbi1.Height / 2 + 20 : l_message.Location.Y;
l_message.Location = new Point((this.Width - l_message.Width) / 2, y);
}
///
/// 关闭loading窗口
///
public static void End()
{
foreach (Form item in Application.OpenForms)
{
if (item.Name == nameof(LoginLoading))
{
//这里要注意下,要允许异步关掉
if (item.InvokeRequired)
{
item.BeginInvoke(new Action(() => { item.Close(); }));
}
else
{
item.Close();
}
break;
}
}
}
其次,写一下Program的main方法
异步创建这个加载窗体,然后去实例化登录窗体,等实例化完毕后,再关掉这个加载窗体
static class Program
{
///
/// 应用程序的主入口点。
///
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Task.Run(() =>
{
Application.Run(new LoginLoading());
});
Login login = new Login();
LoginLoading.End();
if (login.ShowDialog() == DialogResult.OK)
{
Application.Run(new Home());
}
}
}
OK 可以了