首先定义一个加载界面接口,在加载界面可以实现该接口
/// <summary>
/// 加载界面接口
/// </summary>
public interface ILoad
{
/// <summary>
/// 设置加载状态
/// </summary>
void SetState(string state);
}
加载界面控制
/// <summary>
/// 加载界面控制
/// </summary>
public class LoadController
{
/// <summary>
/// Loading界面
/// </summary>
private static Form frm = null;
private static ILoad iLoad;
/// <summary>
/// 显示加载界面
/// </summary>
/// <param name="frmType"></param>
public static void Show(Type frmType)
{
if (frmType == null) return;
Task.Factory.StartNew(() =>
{
object obj = Activator.CreateInstance(frmType);
frm = obj as Form;
iLoad = obj as ILoad;
Application.Run(frm);
});
}
/// <summary>
/// 设置加载状态
/// </summary>
public static string State
{
set
{
if (frm == null || iLoad == null) return;
if (frm.InvokeRequired)
frm.Invoke(new Action<string>((str)=>
{
iLoad.SetState(str);
}),value);
}
}
/// <summary>
/// 关闭加载界面
/// </summary>
public static void Close()
{
if (frm == null) return;
if (frm.InvokeRequired)
frm.Invoke(new MethodInvoker(frm.Hide));
}
}
加载界面实现接口
/// <summary>
/// 加载界面
/// </summary>
public partial class FrmLoading : Form, ILoad
{
public FrmLoading()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
}
/// <summary>
/// 加载状态
/// </summary>
/// <param name="state"></param>
public void SetState(string state)
{
lbState.Text = state;
}
private void FrmLoading_Load(object sender, EventArgs e)
{
rollingBar.StartRolling();
}
private void FrmLoading_FormClosing(object sender, FormClosingEventArgs e)
{
Application.Exit();
}
}
在FrmLoading_Load中可以实现加载效果
在主界面设置加载状态
private void FrmMain_Load(object sender, EventArgs e)
{
LoadController.State = "正在加载...";
Thread.Sleep(500);
//这里放一些比较耗时的操作
LoadController.State = "加载完成...";
Thread.Sleep(500);
//关闭加载界面
LoadController.Close();
}
最后在Program.cs中,先加载Loading界面
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDe
LoadController.Show(typeof(FrmLoading));
Application.Run(new FrmMain());
}
记得在Main窗体启动前加载Loading