在网上抄了两个例子
闪屏说白了就是跟web上面的loading一样的效果。在第一个窗体跳到第二个窗体之间添加一个中间窗体进行过度,等第二个窗体加载完成后中间这个窗体才关闭掉。
例一:
中间窗体: LoadingForm
namespace LoadingFormApp
{
public partial class LoadingForm : Form
{
private static LoadingForm loadingForm = null;
public LoadingForm()
{
InitializeComponent();
}
/// <summary>
/// 显?示º?窗ä¡ã体¬?
/// </summary>
public new static void Show()
{
object syncLock = new object();
lock (syncLock)
{
loadingForm = new LoadingForm();
loadingForm.ShowDialog();
}
}
}
}
主窗体:
namespace LoadingFormApp
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
// 注Á¡é册¨¢闪¦¨¢屏¨¢(ꡧ等̨¨待äy窗ä¡ã体¬?)ê?
RegisterLoadingForm();
}
private void RegisterLoadingForm()
{
Thread thread = new Thread(new ThreadStart(LoadingForm.Show));
thread.Start();
// 主¡Â界?面?加¨®载?初?始º?化¡¥...
LoadMainForm();
thread.Abort();
thread.Join();
}
public void LoadMainForm()
{
Thread.Sleep(2000);
}
}
}
例二:
中间窗体
namespace LoadingFormDemo2
{
public partial class LoadingForm : Form
{
private static LoadingForm loadingForm = null;
public LoadingForm()
{
InitializeComponent();
}
public static void ShowForm()
{
if (null == loadingForm || true == loadingForm.IsDisposed)
loadingForm = new LoadingForm();
loadingForm.Refresh();
loadingForm.ShowDialog();
}
public static void CloseForm()
{
if (null != loadingForm && false == loadingForm.IsDisposed)
{
loadingForm.Refresh();
System.Threading.Thread.Sleep(1000);
loadingForm.Dispose();
}
}
}
}
主窗体
namespace LoadingFormDemo2
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void OnMainFormLoad(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
LoadingForm.ShowForm();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
//程¨¬序¨°处ä|理¤¨ª,ê?加¨®载?数ºy据Y代䨲码?...
System.Threading.Thread.Sleep(5000);
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
LoadingForm.CloseForm();
}
}
}
这里有个小知识点:public new static void Show()
如果不加new也是可以,只是系统会提示如果是有意隐藏,请使用关键字new
C#
override重写,是指对父类中的虚方法(标记virtual)或抽象方法(标记为abstract)进行重写,实现新的功能,它必须与父类方法的签名完全一致,而且与父类方法的可访问性也必须一致 。
new隐藏,是指在子类中重新定义一个签名与父类的方法相同的方法,这个方法可以不用new修饰,只是编译时会弹出一个警告信息:如果是有意隐藏,请使用关键字new。