随笔分类 -  C#

摘要:这几天一直在学习ADO.NET的一些知识,现对ADO.NET数据库访问做个小结,以便和大家交流学习. 要使用ADO.NET提供的数据库访问对象,必须首先在应用程序的开始引用两个命名空间:System.Data和System.Data.SqlClient。请注意这两个命名空间是不同的命名空间,前者不包括后者。System.Data 命名空间提供对表示 ADO.NET 结构的类的访问。通过 ADO.NET 可以生成一些组件,用于有效管理多个数据源的数据。比如我们经常使用的dataset类和datatable类就是由这个命名空间里面的类所提供的。而System.Data.SqlClient命名空.. 阅读全文
posted @ 2012-09-29 17:47 美梦成真 阅读(1242) 评论(0) 推荐(0)
摘要:最近一直在学习C#的多线程编程,发现多线程编程并不容易。在启动访问相同数据的多个线程时,会间歇性地遇到难以发现的问题。下面来讨论与线程相关的问题:争用条件。如果两个或多个线程访问相同的对象,或者访问不同步的共享状态,就会出现争用条件。看下面的例子: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using System.Diagnostics; 6: using System.... 阅读全文
posted @ 2012-09-29 16:45 美梦成真 阅读(1279) 评论(0) 推荐(0)
摘要:任务结束时,它可以把一些有用的状态信息写到共享对象中。这个共享对象必须是线程安全的。另一个选项是使用返回某个结果的任务。使用Task类的泛型版本,就可以定义返回某个结果的任务的返回类型。为了返回某个结果任务调用的方法可以声明为带任意返回类型。示例方法TaskWithResult()利用一个元组返回两个int值。该方法的输入可以是void或object类型,如下所示: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Tex... 阅读全文
posted @ 2012-09-17 12:11 美梦成真 阅读(6972) 评论(0) 推荐(0)
摘要:利用任务连续性,可以在一个任务结束后启动另一个任务。任务也可以构成一个层次结构。一个任务启动一个新任务时,就启动了一个父/子层次结构。下面的代码段在父任务内部新建一个任务。创建子任务的代码与创建父任务的代码相同,唯一的区别是这个任务从另外一个任务内部创建。 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using System.Threading; 6: using Syste... 阅读全文
posted @ 2012-09-17 11:29 美梦成真 阅读(6112) 评论(0) 推荐(0)
摘要:通过任务,可以指定在任务完成之后,应开始运行之后另一个特定任务。例如,一个使用前一个任务的结果的新任务,如果前一个任务失败了,这个任务就应执行一些清理工作。任务处理程序都不带参数或者带一个对象参数,而任务的连续处理方法都有一个Task类型的参数,这里可以访问起始任务的相关信息:如下面的示例代码: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using System.Threading; ... 阅读全文
posted @ 2012-09-14 17:26 美梦成真 阅读(18255) 评论(0) 推荐(0)
摘要:.NET 4.0包含的新名称空间System.Threading.Tasks,它包含的类抽象出了线程功能。任务表示应完成的某个单元的工作。这个单元的工作可以在单独的线程中运行,也可以以同步的方式启动一个任务,这需要等待主调线程。使用任务不仅可以获得一个抽象层,还可以对底层线程进行许多控制。启动任务 1)、使用TaskFactory类的实例,在其中把TaskMethod()方法传递给StartNew方法,就会立即启动任务。 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: ... 阅读全文
posted @ 2012-09-14 14:41 美梦成真 阅读(29870) 评论(5) 推荐(2)
摘要:近来,在项目的后台管理部分开发了一个邮件群发的模块,故将核心的邮件发送代码mark一下。在C#中使用SmtpClient对象通过SMTP传送邮件信息的示例如下: 1: public static bool Send(string host, string from, string fromPassword, string fromDisplayName, 2: List<ToMailAddress> toMailAddress, string subject, string body, out string desc, params string[] at... 阅读全文
posted @ 2012-09-13 10:39 美梦成真 阅读(1059) 评论(0) 推荐(0)
摘要:创建线程需要时间。如果有不同的小任务需要完成,就可以事先创建许多线程,在应完成这些任务的时候发出请求。这个线程数最好在需要更多的线程时增加,在需要释放资源时减少。在.NET Framework中不需要自己创建这样一个列表,该列表由ThreadPool类托管。这个类会在需要时增减线程池中的线程数,直到最大的线程数。池中的最大线程数是可以配置的。在双核CPU中,默认设置为1023个工作线程和1000个I/O线程。也可以指定在创建线程池时应立即启动的最小线程数,以及线程池中可用的最大线程数。如果有更多的作业需要处理,线程池中的线程个数达到了极限,最新的作业就要排队,且必须等待线程完成其任务。 来看. 阅读全文
posted @ 2012-09-11 10:39 美梦成真 阅读(1139) 评论(0) 推荐(0)
摘要:前面一段时间,一直在看<<C#高级编程>>第七版线程、任务和同步这一章的知识。创建线程,除了前面介绍的使用委托创建线程之外,创建线程的第二种方式是使用Thread类创建线程。 1.创建线程 使用Thread类可以创建和控制线程。下面的代码是创建和启动一个新线程的简单例子。 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using System.Threading; ... 阅读全文
posted @ 2012-09-10 18:07 美梦成真 阅读(676) 评论(0) 推荐(0)
摘要:最近,由于在项目中遇到了一个需要过滤文本输入框中是否包含网址的问题。之前采用了网上广泛流行的版本:([a-zA-z]+://[^\s]*)。后来发现这个正则表达式,只能过滤带了http协议的网址,但是对www.sina.com这样的网址却过滤不了。采用(http(s)://)?([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?,发现可以过滤不带协议名的www网址,但是不幸的是连小数也进行了匹配。在网上搜寻良久,没有找到合适的,最后在msdn的技术论坛找到了某位仁兄写的,经测试,达到了自己的要求。故mark一下。(?i)(http://|https://)?(\w+\. 阅读全文
posted @ 2012-07-26 16:48 美梦成真 阅读(685) 评论(0) 推荐(0)
摘要:异步编程,多线程 阅读全文
posted @ 2012-07-16 21:33 美梦成真 阅读(432) 评论(0) 推荐(0)
摘要:转自:http://www.cnblogs.com/ruihua/archive/2007/10/10/917550.html类似于XmlReader,.NET Framework也提供了一个快速、非缓存、只向前的方式动态写入XML数据的类,即XmlWriter类。完全可以将XmlWriter对象理解为 XmlReader对象的对等对象。请注意XML文档不是字符串,不要试图使用操作字符串的方式操作... 阅读全文
posted @ 2009-11-26 17:53 美梦成真 阅读(1798) 评论(0) 推荐(0)
摘要:转自:http://www.cnblogs.com/ruihua/archive/2007/10/08/917138.htmlXmlReader通过向前读取文档并识别读取到的元素,为我们提供了一种消耗资源最少的方式来解析XML数据。很多时候我们都是利用XmlReader来对XML文件的数据有效性进行验证(使用XmlReader实例的Read()方法依次读取所有节点,以此判断是否与符合指定的模式)。... 阅读全文
posted @ 2009-11-26 17:50 美梦成真 阅读(9322) 评论(0) 推荐(0)
摘要:XML能够在各个平台的不同应用程序之间进行数据的传输与存储.它是独立于软件和硬件的信息传输工具.因此,它也成了W3C 的推荐标准.现在软硬件的配置文件一般都采用XML文件来存储.XML文件简单易用,在任何应用程序中都可以访问.在应用程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用... 阅读全文
posted @ 2009-11-09 13:25 美梦成真 阅读(919) 评论(0) 推荐(0)
摘要:一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。(C#语言) static void Main(string[] args) { Console.Write(“第30位数是{0}",Fibonacci(30)); Console.Read(); //第30位数是832040 } private static int Fib... 阅读全文
posted @ 2009-10-11 16:28 美梦成真 阅读(529) 评论(1) 推荐(0)
摘要:转自:http://www.cnblogs.com/xumingming/archive/2009/09/21/1571296.html 1.如果你返回的集合是只用于遍历,不可修改的,则返回IEnumerable<T> 2.如果返回的集合需要修改,如添加和删除元素,用ICollection<T> 3.如果返回的集合需要支持排序,索引等,用IList<T> 4.如... 阅读全文
posted @ 2009-10-09 16:51 美梦成真 阅读(534) 评论(0) 推荐(0)
摘要:这两天,看了一下webcast上面泛型编程的视频以及MSDN上面关于泛型的前四节内容,有一些感受和认识。 泛型是C#2.0和公共语言运行库(CLR)所增加的概念。所谓泛型,就是通过类型参数实现在同一份代码上操作多种数据类型。类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。泛型编程实际上是一种编程范式,它利用"参数化类型"将参数... 阅读全文
posted @ 2009-10-07 16:41 美梦成真 阅读(397) 评论(0) 推荐(0)
摘要:将方法签名与委托类型匹配时,协变(covariant)和逆变(contravariance)可以提供一定程度的灵活性。协变允许方法具有的派生返回类型比委托中定义的更多。逆变允许方法具有的派生参数类型比委托类型中的更少。 示例 1(协变) 说明 本示例演示如何将委托与具有返回类型的方法一起使用,这些返回类型派生自委托签名中的返回类型。由 SecondHandler 返回的数据类型是 Dogs 类... 阅读全文
posted @ 2009-09-28 13:26 美梦成真 阅读(410) 评论(0) 推荐(0)
摘要:今天,我学习了一下MSDN上面委托这一章的内容。虽然自己以前虽然看到看过一些webcast关于委托方面的一些视频,也在网上看过一些相关的介绍,但是一直没有弄清楚委托到底是怎么一回事。今天花了一天时间,我终于可以解开她神秘的外纱。 委托,英文名称为delegate,中文可以翻译为代表,代理。顾名思义,委托和为她分配的方法具有完全相同的行为。委托是一种引用方法的类型,因而它是引用类型的一种。与其他的... 阅读全文
posted @ 2009-09-27 21:27 美梦成真 阅读(340) 评论(0) 推荐(0)
摘要:今天学习了关于面向对象的一些概念,也修正了过去对这些概念的一些理解的不正确的地方.C#中一个完整的类包括六个部分:私有字段(private field)、构造函数(Constructor)、公开属性(public property)、公共方法(public method)、私有方法(private method)、析构函数(destructor).其中的私有方法是在本类中使用,一般是供公共方法调用... 阅读全文
posted @ 2009-09-23 15:36 美梦成真 阅读(254) 评论(0) 推荐(0)