zoukankan      html  css  js  c++  java
  • 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事件中让主线程睡一会儿觉,譬如:

     

    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=========================

  • 相关阅读:
    Js图片利用定时器自动切换(setInterval)
    JS全选,全不选,添加,删除功能的实现
    windows 下安装memcache拓展
    Linux 踢出其他用户
    通过nginx配置php环境变量
    Mac 服务重启
    Mac PHP安装redis扩展
    高并发解决方案
    MySQL 分表
    MySQL 主从-简介
  • 原文地址:https://www.cnblogs.com/wanzhongjun/p/6261834.html
Copyright © 2011-2022 走看看