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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM