Vs2005之简单日志工具的制作--6.启动

  下面说说系统的启动。
  说到启动,就又想起了.net另一个让人郁闷的地方:winform程序相比其他开发工具(比如delphi)产生的程序,启动速度太慢了。启动一个winform程序,可能过了好久系统才真正进入。在这个过程中,如果能将启动条理化,并反应出来,让人看到什么时候程序在做什么,也是一个不错的办法。
  打开MyLog3的解决方案,在MyLog3项目中可以找到一个窗口TfrmConver,它看起来像这个样子:

       
  
  这个界面希望它能够做两件事情:
  一是启动的时候,显示一些启动信息;二是可以通过“关于”命令来显示它,可以随时查看软件的一些相关信息。
  启动信息显示在label1中,它是通过下面这个函数来实现的:  

        public void SetInfo(int step, string infotext)
        ...{
            label1.Text = step.ToString() + "." + infotext;
            Application.DoEvents();
            System.Threading.Thread.Sleep(30);
        }
  这个类的构造被定义成了私有的,因为每次使用这个界面时,某些初始化属性是一样的,因此将生成对象的代码封装在函数ShowCover中:  

        private TfrmCover()
        ...{
            InitializeComponent();
        }

        public static TfrmCover ShowCover(bool showDialog)
        ...{
            TfrmCover form = new TfrmCover();
            form.label1.Text = "";
            form.TopMost = true;

            form._isStart = !showDialog;

            if (showDialog)
                form.ShowDialog();
            else
                form.Show();

            return form;
        }

 

  .net中的Form.ShowDialog()和Form.Show()是两个比较有意思的函数。前者使调用的线程进入“阻塞”状态,只有在ShowDialog()的窗口关闭后,才能执行后面的代码;而后者则没有任何的影响。
  在MyLog3中,TfrmCover有两个要使用的地方,一是启动是主要用来显示启动信息,二是通过关于命令来显示。很显然,前一种状态不能使用ShowDialog()而应该使用Show(),后一种则最好使用ShowDialog()--这也可以说是一种习惯。
  因此,ShowCover中增加了一个参数,bool showDialog,通过它,便确定了生成的TfrmCover对象是使用哪种方式显示出来。
  form.TopMost = true这句代码是指将窗口显示为“最顶层窗口”。
  TfrmCover中还定义了一个bool型变量_isStart,它是用于控制窗口的自动关闭的--但它并不是这里要说的重点。

  有了启动显示信息的界面,便可以一步步地启动系统,启动的代码写在了每个winform应用程序都有的Program类的Main函数中:  

        static void Main(string[] args)
        ...{
            //
        }
 

  在第4章文件类型注册时,向注册表中写入了一个Command项,它使得每当运行一个ml3文件时,便将这个ml3文件的完全路径作为命令行参数来启动MyLog3.exe。为了得到这个ml3文件的路径,需要给Main做一点小小的“手术”,如上面的代码所示,增加一个参数:  

string[] args

 

  这样,通过args这个字符串数组就可以得到传入程序的命令行参数了。

  Main函数代码的前两句是每个WinForm程序都有的,无需变动:  

    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
 

  然后我们要生成TfrmCover的对象,用于显示启动信息:  

TfrmCover form = TfrmCover.ShowCover(false);
 

  下面开始启动系统:

  1。通过调用类TSysRegeist中的函数,增加(或者更新)ml3文件与MyLog3.exe应用程序的关联。

    form.SetInfo(1, "检查注册信息");
    TSysRegeist.AddRegeist();
 

  2。检查命令行参数,这分为三种情况:
  第一种是没有命令行参数,应用程序退出;第二情况是有命令行参数,但其值等于"DelReg",这时需要通过TSysRegeist类来从系统中删除ml3文件类型;最后一种情况需要检查参数所指定的文件是否存在,不存在则退出,存在则继续下一步。  

            form.SetInfo(2, "检查命令行参数");
            检查参数#region 检查参数
            string filePath = null;
            if ((args != null) && (args.Length > 0))
            ...{
                filePath = args[0];
            }

            if (filePath == null)
            ...{
                return;
            }
            if (filePath == "DelReg")
            ...{
                form.SetInfo(3, "卸载注册信息");
                TSysRegeist.DelRegeist();
                return;
            }
            if (!System.IO.File.Exists(filePath))
            ...{
                return;
            }
            #endregion

 

  3。如果程序没有退出,则执行第三步,检查数据结构:  

    form.SetInfo(3, "检查数据结构");
    检查数据#region 检查数据
     TSysData sysData = new TSysData(filePath);
    #endregion
 

  4。生成主窗口:  

    form.SetInfo(4, "初始化主窗口");
    TfrmMain mainForm = new TfrmMain(sysData.DataSet, filePath);
 

  5。初始化主窗口中的数据:  

    form.SetInfo(5, "初始化数据");
    mainForm.Init();
  在这里有一个建议,主窗口的数据初始化过程,尽量不要放到主窗口的Load事件中,而放到自定义的初始化函数。

  最后,释放掉信息提示窗口,并进入应用程序:  

    form.Dispose();
    Application.Run(mainForm);
 

  下一篇,日志类型管理类TStyle的实现。
  ie.2008-04-08。

时间: 2024-09-19 10:04:24

Vs2005之简单日志工具的制作--6.启动的相关文章

Vs2005之简单日志工具的制作--5.数据结构检查

前面说过,所有的管理信息都以DataSet的形式存入了ml3文件中,那么,我们需要一个类,它能够读取这个ml3文件,并且将读取的结果返回给我们: class TSysData    ...{        private DataSet FDataSet;         public DataSet DataSet        ...{            get            ...{                return FDataSet;            }   

Vs2005之简单日志工具的制作--4.文件类型注册

文件类型注册的可重用的类在项目FileTypeReg里,而实际使用的类TSysRegeist在MyLog3(即主程序)项目中. 所谓文件类型注册,实际上是向注册表的HKEY_CLASSES_ROOT项中写入一些相关的数据:首先,在HKEY_CLASSES_ROOT项下建立一个子项,名称即为后缀名,如".ml3".它有一个默认值,比如"ML3_FileType".意思是指,".ml3"文件类型的相关数据存储在HKEY_CLASSES_ROOT下的&

Vs2005之简单日志工具的制作--3.系统配置

系统配置可以分为好多种,ini的,注册表或者其他的.在TSysConfig中,引用了两个类:TSysIni和TSysReg.前者提供系统的ini配置服务,后者提供系统的注册表配置服务. private TSysIni FSysIni;private TSysReg FSysReg;  下面行说Ini服务TSysIni. 这个类需要完成的功能比较简单,它要提供一些系统配置的存取操作.一般来说,写入ini是这样进行的:WriteString(string big,string small,strin

vs2005自带部署工具制作的安装文件,安装后,用桌面或开始菜单快捷方式起动,总是运行windows installer

问题描述 vs2005自带部署工具制作的安装文件,安装后,用桌面或开始菜单快捷方式起动,总是运行windowsinstaller,如果移动了原始安装文件,就无法正常起动,好像安装后的程序的运行离不开原始安装文件.但如果进入安装后的文件夹,直接运行程序,则没有这个问题.高手帮忙! 解决方案 解决方案二:可能是你的快捷方式位置指定的不正确,你可以在安装项目里找到EXE程序用IDE自动给它生成快捷方式,然后复制到你想放置的安装目录.解决方案三:不会吧,难道没有高手知道???解决方案四:看你的快捷方式指

易数一键还原怎么制作usb启动盘制作工具?

易数一键还原怎么制作usb启动盘制作工具? 易数一键还原是一款系统备份与还原软件,易数一键还原支持增量备份与多时间点还原,全中文傻瓜式向导界面,简单易用而又功能强大,全面超越ghost及以 ghost为核心二次开发的系统备份与还原软件.除此之外还能进行usb启动盘制作,有需要用到启动盘的朋友,又不会制作的话,可以请看下文,介绍易数一键还原usb启动盘制作教程. 1. 点击菜单中的"制作易数一键还原USB装机启动盘"选项. 2. 在弹出此功能对话框中,选择要制作启动的优盘,并且设置还原条

Photoshop入门实例教程:简单拼贴图的制作方法

本教程介绍简单拼贴图的制作方法.大致过程:处理之前需要用网格及辅助线把素材均分成一些小方块,然后分别用选区把这些小方块复制到新的图层,适当给小方块描边并添加投影.最后把小方法变形处理,再改变背景颜色即可.原图 最终效果 [1] [2] [3]  下一页

阿里云有什么监控CPU和内存的日志工具

监控CPU和内存的日志工具 Linux 工具: 下载地址:get_cpu_mem_info_sh.rar 使用方法: 下载该文件解压后,上传到 /tmp 目录中. 运行 cd 切换到/tmp目录. 执行: nohup bash get_cpu_mem_info.sh & 该工具会在 /tmp 目录下生成一个日志文件,记录实时监控系统的 CPU.内存的使用情况,等到系统异常时可以用于分析日志. Windows 工具: 下载地址:get_cpu_mem_info_bat.rar 使用方法: 下载该文

PS矢量工具快速制作促销海报字体教程

  这篇教程教脚本之家的PS文字效果学习者们使用PS矢量工具快速制作促销海报字体方法,教程制作出来的文字效果挺漂亮的,制作的难度一般,主要是和大家浅谈利用PS矢量工具打造字体的技巧,推荐一下和脚本之家的朋友们一起分享学习了! 教程结束,以上就是PS矢量工具快速制作促销海报字体教程,从这篇教程里,我们可以学习PS矢量工具的运用,希望大家能熟练运用! 分类: PS文字教程

php实现的简单日志写入函数

 本文实例讲述了php实现的简单日志写入函数.分享给大家供大家参考.具体实现方法如下: 1 2 3 4 5 6 7 8 9 function log( $logthis ){ file_put_contents('logfile.log', date("Y-m-d H:i:s"). " " . $logthis. "rn", FILE_APPEND | LOCK_EX); } // use rn for new line on windows,