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

请教高手——如何两次调用异步方法?

楼主broadury(marvel)2004-08-04 18:47:08 在 .NET技术 / C# 提问

我写一个加密程序。将一个文件加密写到另一个文件中。其中要两次写入流。    
  byte[]   data-〉CryptoStream   cs;    
  data[]   data->FileStream   fs;    
   
  如果第一步是同步,第二步是异步。就没有问题,但是内存消耗太大,我想两次都用异步    
  。    
  这该如何控制呢?    
  代码如下:其中文件是否写完的条件是写入和读取的计数器相同。    
   
   
                          public   class   CryStateObject    
                          {    
                                  public   byte[]   buffer;    
                                  public   MemoryStream   ms;//内存流    
                                  public   CryptoStream   cs;//加密流    
                          }    
   
   
                  public   void   EncryptFile(string   filename)    
                  {    
                          bProccessFile=true;    
                          originFile=new   FileStream("a.dat",FileMode.Open);//源文件    
                          processFile=new   FileStream("b.dat",FileMode.Create);//要加密的文件    
   
                          CryStateObject   cobject=new   CryStateObject();    
                          cobject.ms=new   MemoryStream();    
                          cobject.buffer=new   byte[buffersize];    
                          byte[]   byteTemp=new   byte[Convert.ToInt32(buffersize*0.8)];    
                          this.proceed=0;//已处理的长度    
                          int   datalen=0;//一次读入的长度    
                          recvCallCount=recvCallbackCount=0;    
                          while(this.proceed<originFile.Length)    
                          {    
                                  recvCallCount++;    
                                  datalen=originFile.Read(byteTemp,0,byteTemp.Length);    
                                  this.proceed+=datalen;    
                                  cobject.ms=new   MemoryStream();    
   
                                  transform   =   symm.CreateEncryptor(symm.Key,symm.IV);    
                                  cobject.cs   =   new   CryptoStream(cobject.ms,   transform,   CryptoStr    
  eamMode.Write);    
                                     
                                  cobject.cs.Write(byteTemp,   0,   datalen);    
                                  cobject.cs.FlushFinalBlock();    
                                  byte[]   data=cobject.ms.ToArray();    
   
                                  string   strLen=data.Length.ToString();//记录每次加密的字节数,解    
  密时同样处理    
                                  byte[]   byteLen=Encoding.ASCII.GetBytes(strLen+"\x10");    
                                  processFile.Write(byteLen,0,byteLen.Length);    
                                  processFile.BeginWrite(data,0,data.Length,new   AsyncCallback(En    
  cryptFileWriteBack),processFile);                                    
                          }    
                  }    
   
                  private   void   EncryptFileWriteBack(IAsyncResult   iar)    
                  {    
                          lock(this)    
                          {    
                                  recvCallbackCount++;                                    
                                  FileStream   file=(FileStream)iar.AsyncState;    
                                  file.EndWrite(iar);    
                                  RaiseWriteEncryptFileEvent(originFile.Length.ToString(),(doubl    
  e)this.proceed);    
                                  if(recvCallbackCount==recvCallCount)//加密结束    
                                  {    
                                          this.originFile.Close();    
                                          this.processFile.Close();    
                                  }    
                          }    
                  }    
  问题点数:40、回复次数:4Top

1 楼btut2004(养鱼炒股)回复于 2004-11-03 14:28:51 得分 0

现在没时间Top

2 楼syspring(和风细雨)回复于 2004-11-05 15:37:11 得分 0

up一下,顺便问个问题:  
   
  to:btut2004(《电子产品世界》程序员,申请做C#,Asp.net版主)  
  如果能回答出我两个问题,我一定支持你做C#,Asp.net版主             ^_^  
  ^  
  1.用C#做了一个发邮件的程序,现要增加像outlook里的   回执   功能,请问怎样写?  
  2.异步调用时,怎样知道所有的调用都已经结束,请详细说明。Top

3 楼Korny(登峰)回复于 2004-11-11 10:13:39 得分 0

最好也在忙于这个,关于如何判断异步结束,你这里应该再加一个读出文件的写入文件的当前postion是否相等的条件Top

4 楼lookie(蓝色忧郁)回复于 2005-01-22 18:24:21 得分 40

对,我也同意Top

相关问题

  • 想找一个WEB的异步调用 XML Web services 方法
  • 如何用异步调用改进我的设计
  • 如何用客户端vbscript异步调用xmlhttp?
  • 如何异步调用webservice返回的dataset?
  • 请问如何实现两个进程间函数的异步调用?
  • 请问这个方法如何调用?
  • c#如何调用该方法
  • 自建类方法如何调用?
  • 如何调用父类的方法?
  • 如何调用抽象方法

关键词

  • 加密
  • 文件
  • 异步
  • crystateobject
  • cobject
  • filestream
  • byte
  • data

得分解答快速导航

  • 帖主:broadury
  • lookie

相关链接

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

广告也精彩

反馈

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