winform 使用SplashScreen窗口


SplashScreen,就是平時我們說的濺射屏幕,任何一個做過客戶端程序的coder應該對它都不陌生,因為它能提升用戶體驗,讓軟件看上去更美。SplashScreenForm通常進入程序時是打開,主窗體加載完畢后退出。一般來說,SplashScreenForm比較簡潔,窗體的內容只是顯示程序主題、版權等信息;復雜些的,可以顯示主程序的加載項目情況。

  下面是我實現的一個SplashScreen類:

復制代碼
using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Threading; using System.Reflection; namespace SplashScreen { public class SplashScreen { private static object _obj = new object(); private static Form _SplashForm = null; private static Thread _SplashThread = null; private delegate void ChangeFormTextdelegate(string s); public static void Show(Type splashFormType) { if (_SplashThread != null) return; if (splashFormType == null) { throw (new Exception()); } _SplashThread = new Thread(new ThreadStart(delegate() { CreateInstance(splashFormType); Application.Run(_SplashForm); })); _SplashThread.IsBackground = true; _SplashThread.SetApartmentState(ApartmentState.STA); _SplashThread.Start(); } public static void ChangeTitle(string status) { ChangeFormTextdelegate de = new ChangeFormTextdelegate(ChangeText); _SplashForm.Invoke(de, status); } public static void Close() { if (_SplashThread == null || _SplashForm == null) return; try { _SplashForm.Invoke(new MethodInvoker(_SplashForm.Close)); } catch (Exception) { } _SplashThread = null; _SplashForm = null; } private static void ChangeText(string title) { _SplashForm.Text = title.ToString(); } private static void CreateInstance(Type FormType) { if (_SplashForm == null) { lock (_obj) { object obj = FormType.InvokeMember(null, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null); _SplashForm = obj as Form; _SplashForm.TopMost = true; _SplashForm.ShowInTaskbar = false; _SplashForm.BringToFront(); _SplashForm.StartPosition = FormStartPosition.CenterScreen; if (_SplashForm == null) { throw (new Exception()); } } } } } }
復制代碼

調用的時候只需要傳入你需要作為濺射屏幕的窗體,然后在主窗體加載完畢后調用close方法:

復制代碼
namespace SplashScreen { public partial class MainForm : Form { public MainForm() { SplashScreen.Show(typeof(SplashForm)); InitializeComponent(); Thread.Sleep(1000); SplashScreen.ChangeTitle("111"); Thread.Sleep(1000); SplashScreen.ChangeTitle("222"); Thread.Sleep(1000); SplashScreen.ChangeTitle("333"); Thread.Sleep(1000); SplashScreen.ChangeTitle("444"); SplashScreen.Close(); } } }
復制代碼

 


免責聲明!

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



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