本文转自:http://www.smartgz.com/blog/Article/1088.asp

原文如下:

本代码可以依据主程序加载进度来显示Splash。

    static class Program
{
/// <summary>
/// 主程序的入口点在此设置,包括一些初始化操作,启动窗体等
/// </summary>
private static ApplicationContext context;
[STAThread]
static void Main()
{
Application.EnableVisualStyles(); //样式设置
Application.SetCompatibleTextRenderingDefault(false); //样式设置
Splash sp = new Splash(); //启动窗体
sp.Show(); //显示启动窗体
context = new ApplicationContext();
context.Tag = sp;
Application.Idle += new EventHandler(Application_Idle); //注册程序运行空闲去执行主程序窗体相应初始化代码
Application.Run(context);
} //初始化等待处理函数
private static void Application_Idle(object sender, EventArgs e)
{
Application.Idle -= new EventHandler(Application_Idle);
if (context.MainForm == null)
{
Main mw = new Main();
context.MainForm =mw;
mw.init(); //主窗体要做的初始化事情在这里,该方法在主窗体里应该申明为public
Splash sp = (Splash)context.Tag;
sp.Close(); //关闭启动窗体
mw.Show(); //启动主程序窗体
}
}
}

Splash窗体的相关属性设置:
        BackgroundImage:载入你想作为启动画面的图片;
        ControlBox:False;
        FormBorderStyle:None;
        ShowInTaskbar:False;
        StartPositon:CenterScreen.

[转] 
http://www.lordong.cn/blog/post/18.html 
当程序在启动过程中需要花一些时间去加载资源时,我们希望程序能显示一个欢迎界面,能简单介绍软件功能的同时还能告知用户该程序还在加载中,使得用户体验更友好。 
实现如下:

1. 添加欢迎界面的窗体(比如SlpashForm),做以下调整: 
将FormBorderStyle属性设成None,即没有窗体边框 
将StartPosition属性设成CenterScreen,即总是居中 
将TopMost属性设成True,即总是在顶部 
将UseWaitCursor属性设成Ture,即显示等待光标,让人感觉后台还在运行 
增加一个PictureBox控件,与欢迎图片大小一致,窗体的大小也设成一致 
增加一个ProgressBar控件,将Style设成Marquee,将MarqueeAnimationSpeed设成50

2. 主界面的构造函数改成以下代码:

// Create thread to show splash window
Thread showSplashThread = new Thread(new ThreadStart(ShowSplash));
showSplashThread.Start(); // Time consumed here
InitializeFrame(); // 把原来构造函数中的所有代码移到该函数中 // Abort show splash thread
showSplashThread.Abort();
showSplashThread.Join(); // Wait until the thread aborted
showSplashThread = null; . 显示SplashForm的线程函数
///
/// Thread to show the splash.
///
private void ShowSplash()
{
SplashForm sForm = null;
try
{
sForm = new SplashForm();
sForm.ShowDialog();
}
catch (ThreadAbortException e)
{
// Thread was aborted normally
if (_log.IsDebugEnabled)
{
_log.Debug("Splash window was aborted normally: " + e.Message);
}
}
finally
{
sForm = null;
}
}

4. 在主窗体的Load事件加激活自己的代码 
SetForegroundWindow(Process.GetCurrentProcess().MainWindowHandle);

在使用SetForegroundWindow之前先声明一下 
// Uses to active the exist window 
[DllImport("User32.dll")] 
public static extern void SetForegroundWindow(IntPtr hwnd);

http://www.cnblogs.com/hcfalan/archive/2006/09/13/502730.html

对于需要加载很多组件的应用程序来说,在启动的时候会非常的缓慢,可能会让用户误以为程序已经死掉,这显然不是我们希望看到的。如果能够在启动的时候动态的给用户一些反馈信息(比如当前正在加载的项),那么就可以有效的避免这一问题,并且可以给我们的应用程序增色不少。下边的图片是此代码的效果图。
 
下面是部分代码:
AppStart 类,包含Main方法

public class AppStart
{
public AppStart()
{
}
[STAThread]
static void Main(string[] args)
{
// 显示Splash窗体
Splash.Show(); DoStartup(args); // 关闭Splash窗体
Splash.Close();
} static void DoStartup(string[] args)
{
// 做需要的事情
frmMain f = new frmMain();
Application.Run(f);
}
}

Splash功能类:

public class Splash
{
static frmSplash MySplashForm = null;
static Thread MySplashThread = null; static void ShowThread()
{
MySplashForm = new frmSplash();
Application.Run(MySplashForm);
} static public void Show()
{
if (MySplashThread != null)
return; MySplashThread = new Thread(new ThreadStart(Splash.ShowThread));
MySplashThread.IsBackground = true;
MySplashThread.ApartmentState = ApartmentState.STA;
MySplashThread.Start();
} static public void Close()
{
if (MySplashThread == null) return;
if (MySplashForm == null) return; try
{
MySplashForm.Invoke(new MethodInvoker(MySplashForm.Close));
}
catch (Exception)
{
}
MySplashThread = null;
MySplashForm = null;
} static public string Status
{
set
{
if (MySplashForm == null)
{
return;
} MySplashForm.StatusInfo = value;
}
get
{
if (MySplashForm == null)
{
throw new InvalidOperationException("Splash Form not on screen");
}
return MySplashForm.StatusInfo;
}
}
}

Splash 界面类:

public class frmSplash : System.Windows.Forms.Form
{
private string _StatusInfo = ""; public frmSplash()
{
InitializeComponent();
} private void InitializeComponent()
{
//
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
// } public string StatusInfo
{
set
{
_StatusInfo = value;
ChangeStatusText();
}
get
{
return _StatusInfo;
}
} public void ChangeStatusText()
{
try
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(this.ChangeStatusText));
return;
} labStatus.Text = _StatusInfo;
}
catch (Exception e)
{
// 异常处理
}
}
}

主界面类:

public class frmMain : System.Windows.Forms.Form
{
public frmMain()
{
InitializeComponent(); Splash.Status = "状态:载入初始化模块";
System.Threading.Thread.Sleep(); Splash.Status = "状态:载入管理模块";
System.Threading.Thread.Sleep(); Splash.Status = "状态:载入打印模块";
System.Threading.Thread.Sleep(); Splash.Status = "状态:载入插件模块";
System.Threading.Thread.Sleep(); Splash.Status = "状态:连接数据库";
System.Threading.Thread.Sleep(); Splash.Close();
}
}

最新文章

  1. Java中Eclipse的使用
  2. 神奇的CSS3按钮特效
  3. java学习之关键字
  4. jquery实现文字选择器
  5. linux 防火墙开端口(转)
  6. ASP.NET Core:部署项目到Ubuntu Server
  7. Ionic3 打包并签名Android-App
  8. python3.6 +tkinter GUI编程 实现界面化的文本处理工具
  9. 【伯乐在线】这些 Git 技能够你用一年了
  10. 51Nod - 1433 0和5 找规律
  11. 获取checkbox勾选的id
  12. Mysql error 1317导致从库复制断开
  13. sublime使用技巧汇总
  14. How to resize or create a thumbnail image from file stream on UWP
  15. OAuth2的基本概念的理解
  16. 关于sru源码class Model的parameters
  17. vue项目部署流程
  18. novaclient源码分析
  19. 牛客多校第五场-D-inv
  20. gsub函数

热门文章

  1. pf4j实例 插件框架
  2. Number BZOJ3275 最大流
  3. filter防止xxs攻击
  4. 页面加载完成前的loading加载效果
  5. Canvas制作动态进度加载水球
  6. AJAX使用说明书 基础
  7. python 分页 封装
  8. 牛客Professional Manager(并查集)
  9. linux学习五
  10. day20 模块 collections time sys os