C#启动窗体的制作—基于线程技术实现
2011-08-14 12:54
411 查看
最近在做一个winform的GIS项目,想增加一个启动窗体。为了节约时间,到网上查了一圈,果然搜到一篇不错的博文。
这是原文的地址:http://www.cnblogs.com/hcfalan/archive/2006/09/13/502730.html#
其实原文已经说得很清楚了,我这里就说一下启动窗体界面设计中几个需要设置的地方:
1.Cursor属性设置为 WaitCursor ;
2.FormBorderStyle属性设置为 None ;
3.ShowInTaskbar属性设置为 False ;
4.StartPosition属性设置为 CenterScreen ;
下面是引用原文的部分(有些地方我加了注释):
先看效果图
下面是原文的代码部分:
AppStart 类,包含Main方法,是程序的入口点:
Splash功能类,用于管理启动窗体的显示、关闭等:
Splash 界面类,即启动窗体后台代码:
主界面类,主界面后台代码:
下面是我自己照着上面做的Demo截图:
这是原文的地址:http://www.cnblogs.com/hcfalan/archive/2006/09/13/502730.html#
其实原文已经说得很清楚了,我这里就说一下启动窗体界面设计中几个需要设置的地方:
1.Cursor属性设置为 WaitCursor ;
2.FormBorderStyle属性设置为 None ;
3.ShowInTaskbar属性设置为 False ;
4.StartPosition属性设置为 CenterScreen ;
下面是引用原文的部分(有些地方我加了注释):
先看效果图
下面是原文的代码部分:
AppStart 类,包含Main方法,是程序的入口点:
/// <summary> /// 应用程序启动类 /// </summary> public class AppStart { public AppStart() { } /// <summary> /// 程序入口函数 /// </summary> /// <param name="args"></param> [STAThread] static void Main(string[] args) { //显示启动窗体 Splash.Show(); DoStartup(args); //关闭启动窗体 Splash.Close(); } /// <summary> /// 做需要的事情 /// </summary> /// <param name="args"></param> static void DoStartup(string[] args) { //启动主窗体 frmMain myfrmMain = new frmMain(); Application.Run(myfrmMain); } }
Splash功能类,用于管理启动窗体的显示、关闭等:
/// <summary> /// 启动窗体管理类 /// </summary> public class Splash { static frmSplash mySplashForm = null; static Thread mySplashThread = null; /// <summary> /// 运行启动窗体 /// </summary> static void ShowThread() { mySplashForm = new frmSplash(); Application.Run(mySplashForm); } /// <summary> /// 显示启动窗体 /// </summary> static public void Show() { if (mySplashThread != null) return; //开辟一个线程,并启动 mySplashThread = new Thread(new ThreadStart(Splash.ShowThread)); mySplashThread.IsBackground = true; mySplashThread.SetApartmentState(ApartmentState.STA); mySplashThread.Start(); } /// <summary> /// 关闭启动窗体 /// </summary> 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; } /// <summary> /// 启动窗体的状态信息 /// </summary> 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 partial class frmSplash : Form { private string _StatusInfo = ""; //状态信息 public frmSplash() { InitializeComponent(); } /// <summary> /// 状态信息属性 /// </summary> public string StatusInfo { set { _StatusInfo = value; ChangeStatusText(); } get { return _StatusInfo; } } /// <summary> /// 改变状态信息标签的文本 /// </summary> public void ChangeStatusText() { try { if (this.InvokeRequired) { this.Invoke(new MethodInvoker(this.ChangeStatusText)); return; } labStatus.Text = _StatusInfo; } catch (Exception e) { // 异常处理 } } }
主界面类,主界面后台代码:
public partial class frmMain : Form { public frmMain() { InitializeComponent(); //设置启动窗体的状态信息和延迟时间 Splash.Status = "载入初始化模块..."; System.Threading.Thread.Sleep(1000); Splash.Status = "载入管理模块..."; System.Threading.Thread.Sleep(1000); Splash.Status = "载入打印模块..."; System.Threading.Thread.Sleep(1000); Splash.Status = "载入插件模块..."; System.Threading.Thread.Sleep(1000); Splash.Status = "连接数据库..."; System.Threading.Thread.Sleep(1000); Splash.Close(); } }
下面是我自己照着上面做的Demo截图:
相关文章推荐
- 基于boost 线程并行技术实现消息队列方式[记录]
- 基于APM模式的异步实现及跨线程操作窗体或控件方法的实现示例
- 特殊类型窗体制作: 用C#实现启动欢迎界面
- c# winform 关闭窗体时同时结束线程实现思路
- Android基于WIFI实现电脑和手机间数据传输的技术方案研究
- 实现浏览器兼容的漂浮窗体拖动/改变尺寸的技术要点
- Java毕业设计------基于JSP技术的健身房管理系统的设计与实现
- Unity4.x实现Native App启动Unity,制作混合应用(Integrate Native iOS App into Unity App)
- 三、基于Cortex-A8和ZigBee技术的智能家居监控系统的设计与实现
- 基于HTML5树组件延迟加载技术实现
- 使用WPF技术实现基于MSN协议的五子棋程序
- KVM基于X86硬件辅助的虚拟化技术实现机制【转】
- 线程的状态、实现与启动、实现同步的方法
- Android基于反射技术实现的加减乘除运算示例
- 无缝广告轮播的制作有哪些技术实现
- 基于Ajax技术实现的数据表格控件
- 基于Ajax技术实现的下拉数据表格组件
- 基于Java开源类的RSS技术实现
- 基于SmartThreadPool线程池技术实现多任务批量处理
- 基于SIP协议的IP电话增值业务实现技术