等待表单
启动画面管理器允许您创建一个等待表单(WaitForm) ,一种旨在识别皮肤的表单,用于指示耗时的操作。
主要功能包括:
- 动画的连续进度指示器。
- 您可以在代码中显示关闭等待表单。
- 设计时自定义。
- 通过命令与等待表单进行交互。
- 默认外观设置取决于皮肤。
创建和自定义等待表单
- 将SplashScreenManager 组件拖放到表单上,右键单击Visual Studio托盘中的组件,然后选择Add Wait Form。
- SplashScreenManager将新的WaitForm添加到您的项目。
- 要在设计时查看和自定义等待表单,请在Solution Explorer中双击WaitForm1.cs(WaitForm1.vb)文件。
- 使用属性网格更改内置ProgressPanel的显示设置,此面板显示动画进度指示器和标签。
注意:如果需要使用自定义类扩展WaitForm1.cs/.vb文件,请确保封装Wait Form的类在这些文件中排在第一位。
显示和隐藏等待表单
等待表单不会在主表单启动时自动显示,您可以使用以下方法显示和关闭等待表单,具体取决于等待表单是否处于激活状态(已分配给 SplashScreenManager.ActiveSplashFormTypeInfo属性)。
- 目标等待表单处于激活状态。
要显示/关闭等待表单,请使用非静态的SplashScreenManager.ShowWaitForm和SplashScreenManager.CloseWaitForm方法。
C#:
splashScreenManager1.ShowWaitForm(); //... splashScreenManager1.CloseWaitForm();
VB.NET:
splashScreenManager1.ShowWaitForm() splashScreenManager1.ShowWaitForm() '... splashScreenManager1.CloseWaitForm() splashScreenManager1.CloseWaitForm()
- 目标等待表单未激活。
要显示/关闭等待表单,请使用静态SplashScreenManager.ShowForm和SplashScreenManager.CloseForm方法,特定的SplashScreenManager.ShowForm方法重载允许您指定淡入淡出效果和等待表单位置。
C#:
SplashScreenManager.ShowForm(typeof(WaitForm1)); //... SplashScreenManager.CloseForm();
VB.NET:
SplashScreenManager.ShowForm(GetType(WaitForm1)) '... SplashScreenManager.CloseForm()
动态更新等待表单
与其他初始屏幕一样,等待表单也显示在单独的线程中。
使用以下方法从主线程动态更新显示等待表单的标题和描述:
您还可以使用SplashScreenManager.SendCommand方法与当前的等待表单进行交互(例如,更新其内容)。要处理此方法发送的命令,请重写WaitForm.ProcessCommand方法。
使用说明
显示多个等待表单
如果您的应用程序一次只显示一个等待表单,则可以使用单个SplashScreenManager组件。
若要同时显示多个等待表单,请使用多个SplashScreenManager组件。
MDI应用
在MDI应用程序中,不要显示Control.CreateHandle方法调用的事件或方法的等待表单 - HandleCreated,Load,MdiChildActivate,OnHandleCreated重载等,否则您的应用程序可能会冻结。
而是,使用以下方法:
- 从事件处理程序中调用等待表单。
- 使用方法显示等待表单。
C#:
//Incorrect - the app may freeze private void MdiParent_MdiChildActivate(object sender, EventArgs e) { //... splashScreenManager1.ShowWaitForm(); splashScreenManager1.SetWaitFormCaption("Please wait"); splashScreenManager1.SetWaitFormDescription(description); //... splashScreenManager1.CloseWaitForm(); } //Correct private void MdiParent_MdiChildActivate(object sender, EventArgs e) { BeginInvoke(new Action(() => { //... splashScreenManager1.ShowWaitForm(); splashScreenManager1.SetWaitFormCaption("Please wait"); splashScreenManager1.SetWaitFormDescription(description); //... splashScreenManager1.CloseWaitForm(); })); }
VB.NET :
'Incorrect - the app may crash Private Sub MdiParent_MdiChildActivate(ByVal sender As Object, ByVal e As EventArgs) '... splashScreenManager1.ShowWaitForm() splashScreenManager1.SetWaitFormCaption("Please wait") splashScreenManager1.SetWaitFormDescription(description) '... splashScreenManager1.CloseWaitForm() End Sub 'Correct Private Sub MdiParent_MdiChildActivate(ByVal sender As Object, ByVal e As EventArgs) BeginInvoke(New Action(Sub() '... splashScreenManager1.ShowWaitForm() splashScreenManager1.SetWaitFormCaption("Please wait") splashScreenManager1.SetWaitFormDescription(description) '... splashScreenManager1.CloseWaitForm() End Sub)) End Sub