当前位置: 首页 > 互联网 > 正文

.NET自定义配置文件配置项

最近整合了一个新Winform应用程序,碰到了以下几点较我来讲是新学到的东西:自定义配置文件的配置项;TimeSpan;文本框的多行限制;Socket相关问题。下面分别一一做简要记录:

如何自定义配置文件中的Section,并用代码修改和保存配置文件。
首先,自定义ConfigurationSection,ConfigurationElementCollection,ConfigurationElement类型,其中ConfigurationSection包含ConfigurationElementCollection属性,ConfigurationElementCollection是关于ConfigurationElement元素的集合操作,ConfigurationElement定义其所包含的元素项信息。

第二,需要在App.Config文件中插入自定义Section的类型定义类名,及所在的数据集名称。表示此类将在运行时导入使用。代码如下:

[code lang=”xml”]
<configSections >
<section name="MySection" type="TBApplication.Configure.BankConfigSection,TBApplication"/>
</configSections>

<MySection>
<Banks>
<add name="boc" BankCode="10" IpAddress="192.168.1.174" Port="3001" Interval="60000" />
<add name="icbc" BankCode="19" IpAddress="192.168.1.174" Port="3001" Interval="600000" />
<add name="abc" BankCode="17" IpAddress="192.168.1.174" Port="3001" Interval="10000" />
<add name="bcomm" BankCode="18" IpAddress="192.168.1.157" Port="3001" Interval="600000" />
</Banks>
</MySection>
[/code]

第三,读出配置项,保存和修改配置上述配置项的元素。

读出代码:

[code lang=”csharp”]
//得到Section
BankConfigSection section = (BankConfigSection)System.Configuration.ConfigurationManager.GetSection("MySection");
if (section == null) return;
//得到Section下的元素
BankSettingElement abcelement = section.MySection["abc"];
//接下来得到元素中定义的各个值
AbcSetting.IpAddress = abcelement.IpAddress;
AbcSetting.Port = Int32.Parse(abcelement.Port);
AbcSetting.interval = int.Parse(abcelement.Interval);
AbcSetting.bc = (BankCode)int.Parse(abcelement.BankCode);
[/code]

保存修改后的配置:

[code lang=”csharp”]
//打开配置对象
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//删除某个配置项
config.Sections.Remove("MySection");
//构造配置项实例
BankConfigSection bcs = new BankConfigSection();
//构造配置项对应的元素集合
BankSettingElementCollection bsdc = new BankSettingElementCollection();
//集合中增加各无素
BankSettingElement abcbse = new BankSettingElement();
… …
bsdc.Add(abcbse);
//给Section对集合对象赋值
bcs.MySection = bsdc;

//配置对象加上自定义的Section,并加上自定义的名称MySection
config.Sections.Add("MySection", bcs);
//保存配置文件,模式为修改
config.Save(ConfigurationSaveMode.Modified);
//刷新MySection
ConfigurationManager.RefreshSection("MySection");
[/code]

System.TimeSpan结构体返回两个时间的间隔。按正负天数,小时数,分钟数及秒的小数部分进行度量。对应的公共属性是Days, Hours, Minutes, Seconds. 如果以整天数和天的小部分来表示当前TimeSpanx结构值的话需要用TotalDays公共属性,其它对应的TotalHours, TotalMinutes, TotalSeconds等。因些很多时间我们可以直接用些结构来得到这个数据,而无需自己写转换方法来得到这些值。

TextBox多行显示时,如何限制行数,如果文本超出行数,又如何将最先添加上的文本删除。TextBox的Lines属性是文本框里以各行文字做为元素的字符串数组,我们只要对数组及进行删除,重组操作,这里要注意Array的Copy和Resize两个方法的本质。最后将数组重新返回给文本框的Lines属性,将焦点锁定在最后附加的行上,主要代码如下:

[code lang=”csharp”]
TextBox tb = new TextBox();
tb.AppendText(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + " 信息:…!!… ");

int maxLinds = 40;
if (tb.Lines.Length > maxLinds)
{
int moreLines = tb.Lines.Length – maxLinds;
string[] lines = tb.Lines;
Array.Copy(lines, moreLines, lines, 0, maxLinds);
Array.Resize(ref lines, maxLinds);
tb.Lines = lines;
}
tb.AppendText(Environment.NewLine);
tb.ScrollToCaret();
[/code]

关于Socket。如果 NetworkStream 与 TcpClient 关联,则 NetworkStream.Close 方法将关闭 TCP 连接,但不会释放关联的 TcpClient 。如果 NetworkStream 一直不关闭,就会等到 SendTimeout 超时之后再异常关闭 TCP 连接。为了不让客户端无谓的等待,需要我们在发送完数据之后及时关闭 NetworkStream .

本文固定链接: http://www.byhard.com/?p=1019 | 海纳百川

该日志由 byhard 于2013年06月26日发表在 互联网 分类下,
原创文章转载请注明: .NET自定义配置文件配置项 | 海纳百川
关键字:

.NET自定义配置文件配置项:目前有6 条留言

  1. 地板
    教师日记:

    很久没来了!

    2013-06-27 12:34
    • byhard:

      是啊,最近有些忙。

      2013-06-27 17:22
  2. 时间的流逝,那些年我们折腾博客的精力渐渐消失了。还是坚持保持一份创作精力吧

    2013-06-27 15:24
    • byhard:

      嗯,我会坚持的,加油!

      2013-06-27 17:21
  3. 沙发
    Winter:

    .NET用的少 都是PHP多

    2013-06-27 17:28
    • byhard:

      php不太会,都是做.NET的。

      2013-06-28 08:16