C#中制作启动窗体的方法和问题
来源:互联网 发布:ping ip加端口 编辑:程序博客网 时间:2024/04/26 08:53
在开发windows桌面程序时,经常碰到的一个问题就是:在主窗体显示之前,需要加载大量数据,这样,当用户启动程序后,需要等待一段时间才可以看到主窗体。好的程序设计人员会为软件加上一个启动窗体,并在后台执行加载数据的代码,典型的应用如VS系列、PhotoShop等软件。用户一旦运行程序,首先看到的是启动窗体以及窗体上显示的相关信息,以避免用户产生启动程序后没有反应的误解。
比如我的主窗体名称是MainForm,启动窗体名称是SplachForm,在显示MainForm之前需要加载大量数据,那么可以先显示SplachForm,并在上面以文字或进度条的形式显示数据加载的情况,用户知道应用程序在做什么,也就可以耐心等待了。
简单的做法是修改Application.Run()方法的参数,把主窗体改为SplachForm,当数据加载完成时,隐藏SplachForm,显示MainForm。这里不可以关闭SplachForm,因为C#中,关闭Application.Run方法中调用的窗体对象,将会退出整个应用程序。
上面这个做法的缺点是不可以在MainForm中使用Close方法来退出程序,因为SplachForm只是隐藏,程序是无法退出的,必须使用Application.Exit()方法来退出整个应用程序。
稍好一点的做法是,Application.Run方法的参数仍然是MainForm对象,在MainForm窗体的构造函数中添加以下代码:
SplachForm form=new SplachForm();
form.ShowDialog();
在SplachForm的Load事件中添加代码:
this.Show();
this.Refresh();
Init(); //加载数据的方法
this.Close();
这样主窗体仍然是MainForm,并且在加载完数据后自动显示MainForm。
这个做法虽然简单,但实际效果并不差。不过只适用于启动窗体消失后必然显示MainForm窗体的情况,如果在启动窗体消失后,因为某种原因需要退出程序,效果就不行了,无论怎么处理,主窗体仍然会被显示,即使把上面的this.Close()改成Application.Exit(),主窗体也会显示一下才退出程序。这是因为Application.Run方法的特性造成的,它使调用的窗体可见,并在退出程序时返回到调用的地方。
更好的做法是使用线程技术,把启动窗体和主窗体分为不同线程,先创建启动窗体的线程,在完成加载数据的方法后,创建主窗体的线程,同时关闭启动窗体线程。例如启动窗体加载数据之后,需要显示登录窗体,并根据用户的登录情况来决定是否显示主窗体,用这种方式实现就非常好。当用户登录失败或放弃登录时,不创建主窗体线程,退出程序,不会出现第二种方法的情况。需要注意的是,在VS2005以上的版本中,有一个线程调用安全的问题。
三种方式都用过,第一种简单,效果不太好。第二种也简单,在只有启动窗体并在启动窗体完成后直接进入主程序的情况下,效果也不错。第三种稍为麻烦,但可以处理的情况更多,如在主窗体显示之前要显示多个窗体,目前我只能用第三种方法来实现。
- C#中制作启动窗体的方法和问题
- C#中制作启动窗体的方法和问题
- C#中制作启动窗体的方法和问题
- C#制作启动窗体
- C#制作不规则窗体的简单方法
- C#窗体程序开机启动的问题
- C#启动窗体的制作—基于线程技术实现
- 浅析c#中登录窗体和欢迎窗体关闭的问题
- C#制作闪动的窗体
- C# winform中不规则窗体制作的解决方案
- C# winform中不规则窗体制作的解决方案
- C# winform中不规则窗体制作的解决方案 转
- C#在一个窗体中调用另一个窗体的方法
- C#中模式窗体和非模式窗体的区别
- C# winform中不规则窗体制作的解决方案(已经解决24位色以上不能正常显示问题)
- C# winform中不规则窗体制作的解决方案(已经解决24位色以上不能正常显示问题)
- C# winform中不规则窗体制作的解决方案(已经解决24位色以上不能正常显示问题)
- (转)C# winform中不规则窗体制作的解决方案(已经解决24位色以上不能正常显示问题)
- c++中的类模板
- iOS 7Development Recipes(中文版)之第二章 Storyboard(3)
- 判断javascrit 类型 Object.prototype.toString方法的原理
- 语音识别系统之kaldi----在timit上的实验
- zoj 1091 && hdu 1372 Knight Moves
- C#中制作启动窗体的方法和问题
- E8刷机日志
- 静态链接库与动态链接库导出函数详解(本文系转载)
- auto_ptr常见使用方法
- 面试题之陈利人 单链表和之恋
- 退出ssh继续执行命令
- 添加一个能够自适应字数的UILabel对象到ScrollView
- cocos2d-x酱油笔记之获取系统时间
- 一些好用的Linux命令工具