找到几种简约的欢迎界面的制作方法,存此记录。

方法一:双线程,用第二个线程启动欢迎界面

原文: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事件中让主线程睡一会儿觉,譬如:

protected override void OnLoad(EventArgs e)
 {
     System.Threading.Thread.Sleep(5000);
     base.OnLoad(e);
 } 

为什么要在新线程中显示加载窗体呢?因为忙碌的主窗体已经占有了主线程,如果把加载窗体也安排到主线程的话,它不仅很容易变成“失去响应”的状态,而且有可能连自身都无法顺利加载完,更别说不断滚动的进度条了。

另外,这种方法还有一个缺点,如果主窗体加载缓慢是因为在构造函数中执行了大量操作的话,那么这种方法就起不到作用了。

不过话说回来,在窗体的构造函数中执行影响性能的操作本来就是不被推荐的做法,应当尽量避免。

其他相关文章:

[转]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#下实现软件欢迎界面的更多相关文章

  1. 第三章 用SDK编译出第一个在Linux下的软件界面

    第三章 用SDK编译出第一个在Linux下的软件界面 先创建一个工程目录“mkdir project1”,进入目录,创建main.cpp文件,编写代码如下: 代码内容暂时可以先不理解,先让程序跑起来再 ...

  2. CentOS7 下安装GUI图形界面GNOME

    在安装Gnome包之前,需要检查一下网络是否有网络(使用ping www.baidu.com) 一.先装X windows,-y表示参数同意所有软件安装操,当出现 Complete!说明这里安装成功了 ...

  3. 嵌入式系统WinCE下应用程序GUI界面开发【转】

    嵌入式系统WinCE下应用程序GUI界面开发 ByToradex 秦海 本文旨在介绍嵌入式系统在Wince下进行GUI应用程序开发可以选择的不同GUI开发框架(Framework),目前最常用的几种方 ...

  4. ubantu下安装软件

    Linux系统中,软件通常以源代码或者预编译包的形式提供.(1)软件源代码需要编译为二进制的机器代码才能够使用,安装比较耗时,不过您可以自行调节编译选项,决定需要的功能或组件,或者针对硬件平台作一些优 ...

  5. 工具推荐--Mac下画图软件:Omnigraffle

    场景描述: 日常工作中,开发的小伙伴可能会遇到,需要画流程图,架构图,时序图,UML图,网络拓扑图...等等各种图,有的小伙伴用Visio,ProcessOn,亿图图示......又是一堆软件,先不说 ...

  6. BCG界面库下的Windows8 UI界面样式www.webui8.com

    BCG界面库下的Windows8 UI界面样式(Metro风格)控件主要有以下一些功能: 规则的大块磁贴 支持完整键盘导航 Tile组 标题(Caption) 标题按钮(Caption buttons ...

  7. CentOS 7下的软件安装方法及策略

    一些废话 2010年开始正式接触Linux,入门发行版是Ubuntu 10.10,后来过渡到Ubunu 11.04,这其中也尝试了很多其他主流的发行版.进入实验室之后,开始用CentOS 5,然后是C ...

  8. ubuntu系统下创建软件桌面快捷方式

    转自ubuntu系统下创建软件桌面快捷方式 默认情况下,ubuntu会将自动安装的软件快捷方式保存在/usr/share/applications目录下,如果我们要创建桌面快捷方式,只需要右键-复制- ...

  9. WPF下的视频录制界面设计

    原文:WPF下的视频录制界面设计 在去年12月份,我曾经写过三篇文章讨论C#下视频录制.播放界面的设计.这三篇文章是:利用C#画视频录制及播放的界面(一) 利用C#画视频录制及播放的界面(二)利用C# ...

随机推荐

  1. 新的HTTP框架:Daraja Framework

    https://www.habarisoft.com/daraja_framework.html

  2. PNG优化/压缩

    我们总是希望 PNG 图像的容量能够小些.小些.再小些.优化 PNG 图像,可以用以下几个工具: 1.Optipng Optipng 是命令行工具,直接在其后追加所需优化的 PNG 图像即可 2.Pn ...

  3. LINUX ulimit命令

    概述 系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,经常使用的一种简单手段.ulimit 是一 ...

  4. jquery uploadify上传文件插件导致浏览器崩溃问题解决方法

    自谷歌浏览器更新到(版本39.0.2171.99 )后,访问上传文件界面浏览器就崩溃了,而其他的浏览器不会出现问题. 出现这种问题的原因就是谷歌浏览器缓存问题,但将访问该jsp页面路径添加上时间戳后无 ...

  5. cadence allegro PCB中怎么使查找元件时屏幕不移动

    先按F4进入show element状态,你在找元件,屏幕就会移动到你找的元件上面去,并且将视图放大.

  6. C# 第三方DLL,可以实现PDF转图片,支持32位系统、64位系统

    itextsharp.dll,是一个开源的在C#中用来生成PDF文档的库文件,不少C#爱好者用它制作出了PDF文档生成器.使用时只需在你的C#项目中添加引入此组件即可,使用方法网上有很多,自己查阅一下 ...

  7. bzoj1293

    简易贪心+heap 注意要用链表 type link=^node;      node=record        loc:longint;        next:link;      end;   ...

  8. [POJ 2356] Find a multiple

    Find a multiple Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6535   Accepted: 2849   ...

  9. 从算法入手讲解如何在SQL Server中实现最优最简

    算法是计算机科学中一个重要的研究方向,是解决复杂问题的关键.在计算机世界中,算法无处不在.数据库是存储数据和执行大批量计算的场所,在数据库中使用一些简单的SQL命令,进行存储.查询.统计.以解决现实世 ...

  10. 深入分析Cookie的安全性问题

    Cookie的目的是为用户带来方便,为网站带来增值,一般情况下不会造成严重的安全威胁.Cookie文件不能作为代码执行,也不会传送病毒,它为用户所专有并只能由创建它的服务器来读取.另外,浏览器一般只允 ...