Vs2005之简单日志工具的制作--6.启动
来源:互联网 发布:飞友网络 看准 编辑:程序博客网 时间:2024/05/29 13:40
下面说说系统的启动。
说到启动,就又想起了.net另一个让人郁闷的地方:winform程序相比其他开发工具(比如delphi)产生的程序,启动速度太慢了。启动一个winform程序,可能过了好久系统才真正进入。在这个过程中,如果能将启动条理化,并反应出来,让人看到什么时候程序在做什么,也是一个不错的办法。
打开MyLog3的解决方案,在MyLog3项目中可以找到一个窗口TfrmConver,它看起来像这个样子:
这个界面希望它能够做两件事情:
一是启动的时候,显示一些启动信息;二是可以通过“关于”命令来显示它,可以随时查看软件的一些相关信息。
启动信息显示在label1中,它是通过下面这个函数来实现的:
...{
label1.Text = step.ToString() + "." + infotext;
Application.DoEvents();
System.Threading.Thread.Sleep(30);
}
这个类的构造被定义成了私有的,因为每次使用这个界面时,某些初始化属性是一样的,因此将生成对象的代码封装在函数ShowCover中:
...{
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函数中:
...{
//
}
在第4章文件类型注册时,向注册表中写入了一个Command项,它使得每当运行一个ml3文件时,便将这个ml3文件的完全路径作为命令行参数来启动MyLog3.exe。为了得到这个ml3文件的路径,需要给Main做一点小小的“手术”,如上面的代码所示,增加一个参数:
这样,通过args这个字符串数组就可以得到传入程序的命令行参数了。
Main函数代码的前两句是每个WinForm程序都有的,无需变动:
Application.SetCompatibleTextRenderingDefault(false);
然后我们要生成TfrmCover的对象,用于显示启动信息:
下面开始启动系统:
1。通过调用类TSysRegeist中的函数,增加(或者更新)ml3文件与MyLog3.exe应用程序的关联。
TSysRegeist.AddRegeist();
2。检查命令行参数,这分为三种情况:
第一种是没有命令行参数,应用程序退出;第二情况是有命令行参数,但其值等于"DelReg",这时需要通过TSysRegeist类来从系统中删除ml3文件类型;最后一种情况需要检查参数所指定的文件是否存在,不存在则退出,存在则继续下一步。
检查参数#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。如果程序没有退出,则执行第三步,检查数据结构:
检查数据#region 检查数据
TSysData sysData = new TSysData(filePath);
#endregion
4。生成主窗口:
TfrmMain mainForm = new TfrmMain(sysData.DataSet, filePath);
5。初始化主窗口中的数据:
mainForm.Init();
在这里有一个建议,主窗口的数据初始化过程,尽量不要放到主窗口的Load事件中,而放到自定义的初始化函数。
最后,释放掉信息提示窗口,并进入应用程序:
Application.Run(mainForm);
下一篇,日志类型管理类TStyle的实现。
ie.2008-04-08。
- Vs2005之简单日志工具的制作--6.启动
- Vs2005之简单日志工具的制作--3.系统配置
- Vs2005之简单日志工具的制作--4.文件类型注册
- Vs2005之简单日志工具的制作--5.数据结构检查
- Vs2005之简单日志工具的制作--1.需求分析与功能设计
- Vs2005之简单日志工具的制作--2.根据功能分析进行系统设计
- 使用python制作简单的日志以及日志分析工具
- 简单的日志 筛选工具
- 简单的日志打印工具
- VS2005制作简单的安装程序(转)
- VS2005项目工程的简单安装包制作
- VS2005项目工程的简单安装包制作
- C# 简单的日志文件制作
- MACBOOK AIR 启动工具盘的制作
- 简单制作几个快捷的处理工具
- vs2005入门 之 制作第一个页面及启动运行[视频]
- Log4J 做一个简单的日志工具
- 一个简单的日志跟踪工具
- [转]命令行修改网络设置ip地址、dns、网关的方法(windows)
- 想打球
- 如何取得CPU的主频
- Kugoo用户积分体系
- map用法
- Vs2005之简单日志工具的制作--6.启动
- hibernate设计一棵普通的树
- SQL SERVER 不能连接的完美解决方案
- Tcp应用实例---1.基础知识
- Windows API 类别详细说明,函数的作用
- 正则表达式收集
- shell学习之合并与分割
- 电脑象棋循序渐进(二):从图形界面做起
- 常用JavaScript