C#下实现软件欢迎界面
找到几种简约的欢迎界面的制作方法,存此记录。
方法一:双线程,用第二个线程启动欢迎界面
原文:http://www.cnblogs.com/xiaoshatian/archive/2010/09/07/1820526.html
一个很简单的窗体,它只包含一个Style=Marquee的ProgressBar(这个进度条会不断滚动),下面是它的代码以及注释:
public partial class Splash : Form
{
public Splash()
{
InitializeComponent();
}
//关闭自身
public void KillMe(object o, EventArgs e)
{
this.Close();
}
/// <summary>
/// 加载并显示主窗体
/// </summary>
/// <param name="form">主窗体</param>
public static void LoadAndRun(Form form)
{
//订阅主窗体的句柄创建事件
form.HandleCreated += delegate
{
//启动新线程来显示Splash窗体
new Thread(new ThreadStart(delegate
{
Splash splash = new Splash();
//订阅主窗体的Shown事件
form.Shown += delegate
{
//通知Splash窗体关闭自身
splash.Invoke(new EventHandler(splash.KillMe));
splash.Dispose();
};
//显示Splash窗体
Application.Run(splash);
})).Start();
};
//显示主窗体
Application.Run(form);
}
代码很好理解,Splash类只包含两个方法:一个普通的事件处理程序KillMe和一个静态方法LoadAndRun。LoadAndRun方法用于加载并显示主窗体。在加载主窗体的同时,Splash窗体也会一直显示,直到主窗体加载完毕可以完全显示为止。使用此加载窗体的方法也很简单,只需要把Program.cs中Main方法里的
Application.Run(new Form1());
修改为
Splash.LoadAndRun(new Form1());
即可。
如果想要看到效果,可以在Form1的OnLoad事件中让主线程睡一会儿觉,譬如:
为什么要在新线程中显示加载窗体呢?因为忙碌的主窗体已经占有了主线程,如果把加载窗体也安排到主线程的话,它不仅很容易变成“失去响应”的状态,而且有可能连自身都无法顺利加载完,更别说不断滚动的进度条了。
另外,这种方法还有一个缺点,如果主窗体加载缓慢是因为在构造函数中执行了大量操作的话,那么这种方法就起不到作用了。
不过话说回来,在窗体的构造函数中执行影响性能的操作本来就是不被推荐的做法,应当尽量避免。
其他相关文章:
[转]WinForm下Splash(启动画面)制作:
http://www.cnblogs.com/huaiyu2006/archive/2008/11/26/1341466.html
方法二:较简单的一种,在主界面程序中创建一个新窗口做欢迎界面,适合像我这样的新手。
第一步: 主程序启动主窗体(这里表示为 form1)
代码如下:
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
第二步: 主窗体(form1) 中的 _Load 事件中启动欢迎界面 (form2)
如下:
private void Form1_Load(object sender, EventArgs e)
{
//启动窗体
Form2 MySplashForm = new Form2();
MySplashForm.ShowDialog();
}
第三步: 欢迎界面中控制界面的显示方式并使用 timer 控制欢迎界面的消失时间
如下:
private void Form2_Load(object sender, EventArgs e)
{
//设置启动窗体
this.FormBorderStyle = FormBorderStyle.None;
this.BackgroundImage = Image.FromFile("test.jpg");
this.timer1.Start();
this.timer1.Interval = 10000;
//我觉得这里设置4000就足够了,别太装B,本来这种方法就是适合小
//程序,根本不存在所谓的程序加载,还设置10s不是找抽咩?!
}
private void timer1_Tick(object sender, EventArgs e)
{
//停止计时器
this.timer1.Stop();
//关闭启动窗体
this.Close();
}
==========================The End=========================
C#下实现软件欢迎界面的更多相关文章
- 第三章 用SDK编译出第一个在Linux下的软件界面
第三章 用SDK编译出第一个在Linux下的软件界面 先创建一个工程目录“mkdir project1”,进入目录,创建main.cpp文件,编写代码如下: 代码内容暂时可以先不理解,先让程序跑起来再 ...
- CentOS7 下安装GUI图形界面GNOME
在安装Gnome包之前,需要检查一下网络是否有网络(使用ping www.baidu.com) 一.先装X windows,-y表示参数同意所有软件安装操,当出现 Complete!说明这里安装成功了 ...
- 嵌入式系统WinCE下应用程序GUI界面开发【转】
嵌入式系统WinCE下应用程序GUI界面开发 ByToradex 秦海 本文旨在介绍嵌入式系统在Wince下进行GUI应用程序开发可以选择的不同GUI开发框架(Framework),目前最常用的几种方 ...
- ubantu下安装软件
Linux系统中,软件通常以源代码或者预编译包的形式提供.(1)软件源代码需要编译为二进制的机器代码才能够使用,安装比较耗时,不过您可以自行调节编译选项,决定需要的功能或组件,或者针对硬件平台作一些优 ...
- 工具推荐--Mac下画图软件:Omnigraffle
场景描述: 日常工作中,开发的小伙伴可能会遇到,需要画流程图,架构图,时序图,UML图,网络拓扑图...等等各种图,有的小伙伴用Visio,ProcessOn,亿图图示......又是一堆软件,先不说 ...
- BCG界面库下的Windows8 UI界面样式www.webui8.com
BCG界面库下的Windows8 UI界面样式(Metro风格)控件主要有以下一些功能: 规则的大块磁贴 支持完整键盘导航 Tile组 标题(Caption) 标题按钮(Caption buttons ...
- CentOS 7下的软件安装方法及策略
一些废话 2010年开始正式接触Linux,入门发行版是Ubuntu 10.10,后来过渡到Ubunu 11.04,这其中也尝试了很多其他主流的发行版.进入实验室之后,开始用CentOS 5,然后是C ...
- ubuntu系统下创建软件桌面快捷方式
转自ubuntu系统下创建软件桌面快捷方式 默认情况下,ubuntu会将自动安装的软件快捷方式保存在/usr/share/applications目录下,如果我们要创建桌面快捷方式,只需要右键-复制- ...
- WPF下的视频录制界面设计
原文:WPF下的视频录制界面设计 在去年12月份,我曾经写过三篇文章讨论C#下视频录制.播放界面的设计.这三篇文章是:利用C#画视频录制及播放的界面(一) 利用C#画视频录制及播放的界面(二)利用C# ...
随机推荐
- Cinema 4D R16安装教程
CINEMA 4D_百度百科 http://baike.baidu.com/view/49453.htm?fr=aladdin 转自百度贴吧 [教程]Cinema 4D R16新功能介绍及安装教程_c ...
- *IntelliJ idea创建创建Maven管理的Java Web项目
配置IntelliJ在IntelliJ的设置中,可以设置maven的安装目录,settings.xml文件的位置,和本地仓库的位置等信息.
- 解决git Push时请求username和password,而不是ssh-key验证
转载自:https://blog.lowstz.org/posts/2011/11/23/why-git-push-require-username-password-github/ 之前开始用git ...
- 不只是技术!成为IT经理必备的十大软技能
摘要:可能你是一名普通的IT从业员,一个小小的程序员,可随着社会的发展和科技的进步,对人才的要求越来越高,你可能通过技术获得了职位,但你若想升职加薪却少不了软技能:谈判技巧.积极倾听.演讲技巧以及领导 ...
- 转:LayoutInflater作用及使用
作用: 1.对于一个没有被载入或者想要动态载入的界面, 都需要使用inflate来载入. 2.对于一个已经载入的Activity, 就可以使用实现了这个Activity的的findViewById() ...
- 我个人有关 Azure 网络 SLA、带宽、延迟、性能、SLB、DNS、DMZ、VNET、IPv6 等的 Azure 常见问题解答
Igor Pagliai(微软) 2014 年 9月 28日上午 5:57 年 11 月 3 年欧洲 TechEd 大会新宣布的内容). 重要提示:这篇文章中我提供的信息具有时间敏感性,因为这些 ...
- apache开源项目--log4j
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Syslog守护进程等; ...
- 【转】如何在Ubuntu11.10(32位)下编译Android4.0源码(图文)
原文网址:http://blog.csdn.net/flydream0/article/details/7046612 关于如何下载Android4.0的源码请参考我的另一篇文章: http://bl ...
- oracle 有关大数据
一. oracle大数据量分区后查询效率低下的一些建议: 1 对于当前表tm_bus_realtime_log.查看它的索引,只有一个(索引名:INDEX_BUS_REALTIME 字段名:UPLOA ...
- JMX-JAVA进程监控利器
Java 管理扩展(Java Management Extension,JMX)是从jdk1.4开始的,但从1.5时才加到jdk里面,并把API放到java.lang.management包里面. 如 ...