100165812.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 590 行 · 第 1/3 页
HTM
590 行
<p class=1 style='margin-left:37.55pt;FTEL:-16.1pt'><span lang=EN-US>●<span
style='font:7.0pt "Times New Roman"'> </span></span><span
style='font-family:宋体'>在</span><span lang=EN-US>EventLogTraceListener</span><span
style='font-family:宋体'>类的帮助下,可以把跟踪写到事件日志中。这个类实现</span><span lang=EN-US>Trace
Listener</span><span style='font-family:宋体'>抽象类。</span></p>
<h4 style='FTEL:21.45pt'><span lang=EN-US>3. </span><span
style='font-family:黑体'>添加事件日志</span></h4>
<p class=MsoNormal><span style='font-family:宋体'>如果</span><span lang=EN-US>ServiceBase</span><span
style='font-family:宋体'>类的</span><span lang=EN-US>AutoLog</span><span
style='font-family:宋体'>属性设置为</span><span lang=EN-US>true</span><span
style='font-family:宋体'>,则将自动把事件记入日志。</span><span lang=EN-US>ServiceBase</span><span
style='font-family:宋体'>类把请求服务的启动、停止、暂停和继续的信息性事件记入日志。在</span><span lang=EN-US>ServiceInstaller</span><span
style='font-family:宋体'>类中,将创建一个</span><span lang=EN-US>EventLogInstaller</span><span
style='font-family:宋体'>实例,以配置事件日志源。事件日志源与服务同名。如果要把事件写到日志中,可以使用</span><span
lang=EN-US>EventLog</span><span style='font-family:宋体'>类的</span><span
lang=EN-US>WriteEntry()</span><span style='font-family:宋体'>静态方法。</span><span
lang=EN-US>Source</span><span style='font-family:宋体'>属性已经在</span><span
lang=EN-US>ServiceBase</span><span style='font-family:宋体'>类中设置了:</span></p>
<p class=2 style='margin-top:8.15pt;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>eventLog.WriteEntry
("event log message");</span></p>
<p class=MsoNormal style='FTEL:8.15pt'><span lang=EN-US
style='color:black'>WriteEntry()</span><span style='font-family:宋体;color:black'>方法用于把信息性的事件记入日志。如果要创建警告事件或错误事件,则可以使用</span><span
lang=EN-US style='color:black'>WriteEvent()</span><span style='font-family:
宋体;color:black'>的重载方法指定类型:</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>eventLog.WriteEntry("event
log message", EventLogEntryType.Warning);</span></p>
<p class=2 style='margin-top:0cm;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>eventLog.WriteEntry("event
log message", EventLogEntryType.Error);</span></p>
<h4 style='FTEL:21.45pt'><span lang=EN-US>4. </span><span
style='font-family:黑体'>把事件日志添加给其他的应用程序类型</span></h4>
<p class=MsoNormal><span style='font-family:宋体;color:black'>对于服务而言,</span><span
lang=EN-US style='color:black'>ServiceBase</span><span style='font-family:宋体;
color:black'>类可以自动添加事件日志特性。如果要在其他的应用程序类型中使用事件日志,使用</span><span lang=EN-US
style='color:black'>Visual Studio .NET</span><span style='font-family:宋体;
color:black'>可以非常容易地实现。实现的具体步骤如下:</span></p>
<p class=1 style='margin-left:37.55pt;FTEL:-16.1pt'><span lang=EN-US>●<span
style='font:7.0pt "Times New Roman"'> </span></span><span
style='font-family:宋体'>使用</span><span lang=EN-US>Toolbox</span><span
style='font-family:宋体'>把</span><span lang=EN-US>EventLog</span><span
style='font-family:宋体'>组件添加到设计器上。</span></p>
<p class=1 style='margin-left:37.55pt;FTEL:-16.1pt'><span lang=EN-US>●<span
style='font:7.0pt "Times New Roman"'> </span></span><span
style='font-family:宋体'>把</span><span lang=EN-US>EventLog</span><span
style='font-family:宋体'>组件的</span><span lang=EN-US>Log</span><span
style='font-family:宋体'>属性设置为</span><span lang=EN-US>Application</span><span
style='font-family:宋体'>,把</span><span lang=EN-US>Source</span><span
style='font-family:宋体'>属性设置为选中的名称。这个名称通常是显示在</span><span lang=EN-US>Event Viewer</span><span
style='font-family:宋体'>中的应用程序名称。</span></p>
<p class=1 style='margin-left:37.55pt;FTEL:-16.1pt'><span lang=EN-US>●<span
style='font:7.0pt "Times New Roman"'> </span></span><span
style='font-family:宋体'>使用</span><span lang=EN-US>EventLog</span><span
style='font-family:宋体'>实例的</span><span lang=EN-US>WriteEntry()</span><span
style='font-family:宋体'>方法即可写日志。</span></p>
<p class=1 style='margin-left:37.55pt;FTEL:-16.1pt'><span lang=EN-US>●<span
style='font:7.0pt "Times New Roman"'> </span></span><span
style='font-family:宋体'>从</span><span lang=EN-US>EventLog</span><span
style='font-family:宋体'>组件的</span><span lang=EN-US>Add Installer</span><span
style='font-family:宋体'>菜单中可以添加安装程序。这将创建</span><span lang=EN-US>ProjectInstaller</span><span
style='font-family:宋体'>类,这个类用于在注册表中配置事件源。</span></p>
<p class=1 style='margin-left:37.55pt;FTEL:-16.1pt'><span lang=EN-US>●<span
style='font:7.0pt "Times New Roman"'> </span></span><span
style='font-family:宋体'>使用</span><span lang=EN-US>installutil</span><span
style='font-family:宋体'>命令,可以注册应用程序。</span><span lang=EN-US>installutil</span><span
style='font-family:宋体'>调用</span><span lang=EN-US>ProjectInstaller</span><span
style='font-family:宋体'>类,注册事</span><span lang=EN-US>
</span><span style='font-family:宋体'>件源。</span></p>
<p class=MsoNormal><span style='font-family:宋体;color:black'>如果使用的是</span><span
lang=EN-US style='color:black'>xcopy</span><span style='font-family:宋体;
color:black'>安装,则不需要最后的两个步骤。如果设置了</span><span lang=EN-US style='color:black'>EventLog</span><span
style='font-family:宋体;color:black'>实例的</span><span lang=EN-US style='color:
black'>Source</span><span style='font-family:宋体;color:black'>属性,则在第一次写事件日志时,事件源将自动注册。这是很简单的,但对于实际的应用程序,最好添加安装程序。使用</span><span
lang=EN-US style='color:black'>installutil/u</span><span style='font-family:
宋体;color:black'>命令,可以注销事件日志配置。如果删除了应用程序,并且没有调用</span><span lang=EN-US
style='color:black'>EventLog.DeleteEventSource()</span><span style='font-family:
宋体;color:black'>方法,则注册表项会一直存在。</span></p>
<h4 style='FTEL:21.45pt'><span lang=EN-US>5. </span><span
style='font-family:黑体'>给</span><span lang=EN-US>QuoteServer</span><span
style='font-family:黑体'>添加事件日志功能</span></h4>
<p class=MsoNormal><span style='font-family:宋体'>在前面</span><span lang=EN-US>QuoteService</span><span
style='font-family:宋体'>中使用的库</span><span lang=EN-US>QuoteServer</span><span
style='font-family:宋体'>目前还没有事件日志功能,这是很容易添加的。为了使用</span><span lang=EN-US
style='color:black'>Visual Studio .NET</span><span style='font-family:宋体;
color:black'>设计器把</span><span lang=EN-US style='color:black'>EventLog</span><span
style='font-family:宋体;color:black'>组件拖放到类中,必须给类添加设计器支持。</span></p>
<p class=a3 style='margin-top:8.15pt;FTEL:21.45pt'><span
style='font-family:黑体'>注意:</span></p>
<p class=a1 style='FTEL:8.15pt;FTEL:21.45pt'><span
style='font-family:楷体_GB2312'>要给类添加设计器支持,必须使该类派生于基类</span><span lang=EN-US>System.ComponentModel.Component</span><span
style='font-family:楷体_GB2312'>,并在类的构造函数中调用方法</span><span lang=EN-US>InitializeComponent()</span><span
style='font-family:楷体_GB2312'>。方法</span><span lang=EN-US>InitializeComponent()</span><span
style='font-family:楷体_GB2312'>将在设计器中使用,设置组件的属性,在第一次把组件拖放到设计器界面上时,该方法会自动添加,但这里必须手工调用这个方法。</span></p>
<p class=MsoNormal><span style='font-family:宋体'>在库</span><span lang=EN-US>QuoteServer</span><span
style='font-family:宋体'>中利用基类</span><span lang=EN-US>System.ComponentModel.Component</span><span
style='font-family:宋体'>修改</span><span lang=EN-US>QuoteServer</span><span
style='font-family:宋体'>类的代码后,就可以把</span><span lang=EN-US style='color:black'>Visual
Studio .NET</span><span style='font-family:宋体;color:black'>切换到设计视图:</span></p>
<p class=2 style='margin-top:8.15pt;margin-right:0cm;FTEL:0cm;
margin-left:21.45pt;FTEL:.0001pt;FTEL:18.45pt'><span
lang=EN-US> public class QuoteServer :
System.ComponentModel.Component</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
{</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
//…</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US> </span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
public QuoteServer(): this("quotes.txt")</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
{</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
}</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US> </span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
public QuoteServer(string filename) : this(filename, 7890)</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
{</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
}</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US> </span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
public QuoteServer(string filename, int port)</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
{</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
this.filename = filename;</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
this.port = port;</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US> </span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
InitializeComponent();</span></p>
<p class=a6 style='margin-top:0cm;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
}</span></p>
<p class=MsoNormal><span style='font-family:宋体;color:black'>修改完成后,就可以把</span><span
lang=EN-US style='color:black'>EvemtLog</span><span style='font-family:宋体;
color:black'>组件从工具箱拖放到设计视图上,创建</span><span lang=EN-US style='color:black'>EvemtLog</span><span
style='font-family:宋体;color:black'>类的一个实例。把该对象的</span><span lang=EN-US
style='color:black'>Log</span><span style='font-family:宋体;color:black'>属性改为</span><span
lang=EN-US style='color:black'>Application</span><span style='font-family:宋体;
color:black'>,把</span><span lang=EN-US style='color:black'>Source</span><span
style='font-family:宋体;color:black'>属性改为</span><span lang=EN-US>QuoteService</span><span
style='font-family:宋体'>。</span></p>
<p class=MsoNormal><span style='font-family:宋体'>接着修改类</span><span lang=EN-US>QuoteServer</span><span
style='font-family:宋体'>中方法</span><span lang=EN-US>Listener()</span><span
style='font-family:宋体'>的执行代码,以便在生成异常时写入事件日志:</span></p>
<p class=a6 style='margin-top:8.15pt;margin-right:0cm;FTEL:0cm;
margin-left:21.45pt;FTEL:.0001pt;FTEL:18.45pt'><span
lang=EN-US> protected void Listener()</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
{</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
try</span></p>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?