CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

求这篇文章的源代码~~急啊~

楼主adition(qwe)2005-06-03 10:43:00 在 .NET技术 / C# 提问

在赛迪网看《由C++转向C#:我们需要注意哪些方面的变化?》这篇文章,我想根据下面的思路用C#改写成一个把文本文件导入sql   server数据库的多线程程序,但该文章已不提供源码下载,哪位大侠有,发给我一份好吗?boycms@163.com   或者你自己写的也行,小弟感激不尽~~  
   
  为了更好地理解C#与C++的区别和解决问题方式的变化,我们先来看一个比较简单的例子。我们将创建一个读取文本文件的类,并在屏幕上显示其内容。我将把它做成多线程程序,以便在从磁盘上读取数据时还可以做其他的工作。    
   
  在C++中,我们可能会创建一个读文件的线程和另一个做其他工作的线程,这二个线程将各自独立地运行,但可能会需要对它们进行同步。在C#中,我们也可以完成同样的工作,由于.NET框架提供了功能强大的异步I/O机制,在编写线程时,我们会节省不少的时间。    
   
  异步I/O支持是内置在CLR中的,而且几乎与使用正常的I/O流类一样简单。在程序的开始,我们首先通知编译器,我们将在程序中使用许多名字空间中的对象:    
   
  usingSystem;  
  usingSystem.IO;  
  usingSystem.Text;    
   
   
  在程序中包含System,并不会自动地包含其所有的子名字空间,必须使用using关健字明确地包含每个子名字空间。我们在例子中会用到I/O流类,因此需要包含System.IO名字空间,我们还需要System.Text名字空间支持字节流的ASCII编码。    
   
  由于.NET架构为完成了大部分的工作,编写这一程序所需的步骤相当简单。我们将用到Stream类的BeginRead方法,它提供异步I/O功能,将数据读入到一个缓冲区中,当缓冲区可以处理时调用相应的处理程序。    
   
  我们需要使用一个字节数组作为缓冲区和回叫方法的代理,并将这二者定义为驱动程序类的private成员变量。    
   
  publicclassAsynchIOTester  
  {  
  privateStreaminputStream;  
  privatebyte[]buffer;  
  privateAsyncCallbackmyCallBack;    
   
   
  inputStream是一个Stream类型的变量,我们将对它调用BeginRead方法。代理与成员函数的指针非常相似。代理是C#的第一类元素。    
   
  当缓冲区被磁盘上的文件填满时,.NET将调用被代理的方法对数据进行处理。在等待读取数据期间,我们可以让计算机完成其他的工作。(在本例中是将1个整型变量由1增加到50000,但在实际的应用程序中,我们可以让计算机与用户进行交互或作其他有意义的工作。)    
   
  本例中的代理被定义为AsyncCallback类型的过程,这是Stream的BeginRead方法所需要的。System空间中AsyncCallback类型代理的定义如下所示:    
   
  publicdelegatevoidAsyncCallback(IAsyncResultar);    
   
   
  这一代理可以是与任何返回void类型值、将IAsyncResult界面作为参数的方法相关联的。在该方法被调用时,CLR可以在运行时传递IAsyncResult界面对象作为参数。我们需要如下所示的形式定义该方法:    
   
  voidOnCompletedRead(IAsyncResultasyncResult)    
   
   
  然后在构造器中与代理连接起来:    
   
  AsynchIOTester()  
  {  
  ???  
  myCallBack=newAsyncCallback(this.OnCompletedRead);  
  }    
   
   
  上面的代码将代理的实例赋给成员变量myCallback。下面是全部程序的详细工作原理。在Main函数中,创建了一个类的实例,并让它开始运行:    
   
  publicstaticvoidMain()  
  {  
  AsynchIOTestertheApp=newAsynchIOTester();  
  theApp.Run();  
  }    
   
   
  new关健字能够启动构造器。在构造器中我们打开一个文件,并得到一个Stream对象。然后在缓冲中分配空间并与回调机制联结起来。    
   
  AsynchIOTester()  
  {  
  inputStream=File.OpenRead(@"C:\MSDN\fromCppToCS.txt");  
  buffer=newbyte[BUFFER_SIZE];  
  myCallBack=newAsyncCallback(this.OnCompletedRead);  
  }    
   
   
  在Run方法中,我们调用了BeginRead,它将以异步的方式读取文件。    
   
  inputStream.BeginRead(  
  buffer,//存放结果  
  0,//偏移量  
  buffer.Length,//缓冲区中有多少字节  
  myCallBack,//回调代理  
  null);//本地对象    
   
   
  这时,我们可以完成其他的工作。    
   
  for(longi=0;i<50000;i++)  
  {  
  if(i%1000==0)  
  {  
  Console.WriteLine("i:{0}",i);  
  }  
  }    
   
   
  文件读取操作结束后,CLR将调用回调方法。    
   
  voidOnCompletedRead(IAsyncResultasyncResult)  
  {    
   
   
  在OnCompletedRead中要做的第一件事就是通过调用Stream对象的EndRead方法找出读取了多少字节:    
   
  intbytesRead=inputStream.EndRead(asyncResult);    
   
   
  对EndRead的调用将返回读取的字节数。如果返回的数字比0大,则将缓冲区转换为一个字符串,然后将它写到控制台上,然后再次调用BeginRead,开始另一次异步读的过程。    
   
  if(bytesRead>0)  
  {  
  Strings=Encoding.ASCII.GetString(buffer,0,bytesRead);  
  Console.WriteLine(s);  
  inputStream.BeginRead(buffer,0,buffer.Length,  
  myCallBack,null);  
  }    
   
   
  现在,在读取文件的过程中就可以作别的工作了(在本例中是从1数到50000),但我们可以在每次缓冲区满了时对读取的数据进行处理(在本例中是向控制台输出缓冲区中的数据)。有兴趣的读者可以点击此处下载完整的源代码。    
  问题点数:0、回复次数:6Top

1 楼boyxia(>>雪饮狂刀 [抵制日货]<<)回复于 2005-06-03 10:55:18 得分 0

分析思路,掌握原理,代码是次要的。Top

2 楼dutguoyi(新鲜鱼排)回复于 2005-06-03 11:07:01 得分 0

upTop

3 楼adition(qwe)回复于 2005-06-03 11:36:37 得分 0

因为我对C#不熟,所以不知应该如何实现??那位大侠帮帮忙啊~~~Top

4 楼adition(qwe)回复于 2005-06-03 13:16:36 得分 0

upTop

5 楼zeusvenus()回复于 2005-06-03 14:09:55 得分 0

看看其他转载的地方还有没有提供代码下载的.Top

6 楼adition(qwe)回复于 2005-06-04 10:34:56 得分 0

upTop

相关问题

  • ****急要Socket源代码×××××
  • 求界面源代码,急!!!
  • 急!50分急求VFP源代码
  • 求新闻文章系统的源代码,asp.net(C#) sql server,带源代码
  • 急,几句源代码帮看看
  • 急需#字游戏源代码!!
  • 急需C/S通信的源代码
  • 急求ICA的源代码(要C/C++)
  • 源代码管理器的用法,急!!
  • 求MD5源代码 for c/c++ 急~~~~~~~~

关键词

  • .net
  • c#
  • c++
  • 线程
  • 数据
  • 文件
  • 缓冲区
  • beginread
  • 本例
  • 调用

得分解答快速导航

  • 帖主:adition

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo