123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- using System;
- using System.Reflection;
- using System.Threading;
- using System.Windows.Forms;
-
- namespace Common.system
- {
- /// <summary>
- /// 解决闪屏 加载等待
- /// 创建人:赵耀
- /// 创建时间:2018年11月27日
- /// </summary>
- 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);
- }))
- {
- 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());
- }
- }
- }
- }
-
- }
- }
|