1.異步讀取地址下信息
public void T_Invoke()
{
var request = WebRequest.Create("http://www.sina.com.cn");
//io yibu
request.BeginGetRequestStream(AsyncCallbackImpl, request);
}
public void AsyncCallbackImpl(IAsyncResult ar)
{
WebRequest request = ar.AsyncState as WebRequest;
var reponse = request.EndGetResponse(ar);
var stream = request.GetRequestStream();
using (StreamReader reader=new StreamReader(stream))
{
//values
string str=reader.ReadLine();
}
}
2.異步時間 讀取路徑下文件字符流信息
public event EventHandler<ReturnEndReadEventargs> IsReturnEvent;
FileStream InputStream;
StringBuilder ReadValue;
byte[] buffer;
public string ReadFileAsync(string fileName)
{
ReadValue = new StringBuilder();
int BufferSize=0;
buffer = new byte[BufferSize];
InputStream = new FileStream(fileName, FileMode.Open, FileAccess.Read,
FileShare.Read, BufferSize, useAsync: true);
InputStream.BeginRead(buffer, 0, buffer.Length, OnCompleteRead, null);
//InputStream.write
return ReadValue.ToString();
}
public void OnCompleteRead(IAsyncResult asyncResult)
{
//異步讀取一個快,接收數據
int bytesRead = InputStream.EndRead(asyncResult);
//如果沒有任何字節,則流已達文件結尾
if (bytesRead > 0)
{
//暫停以對模擬對數據塊的處理
Debug.WriteLine("異步線程:已讀取一塊內容");
var datastr = Encoding.UTF8.GetString(buffer, 0, buffer.Length);
ReadValue.Append(datastr);
Thread.Sleep(TimeSpan.FromMilliseconds(20));
//開始讀取下一塊
InputStream.BeginRead(buffer, 0, buffer.Length, OnCompleteRead, null);
}
else
{
//操作結束
Debug.WriteLine(" 異步線程:讀取文件結束");
//event必須方法裏調用
OnIsReturnEvent();
}
}
protected virtual void OnIsReturnEvent()
{
IsReturnEvent?.Invoke(this, new ReturnEndReadEventargs(true, ReadValue.ToString()));
//IsReturnEvent(this, new ReturnEndReadEventargs(true, ReadValue.ToString()));
}
public class ReturnEndReadEventargs : EventArgs
{
public ReturnEndReadEventargs(bool isReturn, string value)
{
IsReturn = isReturn;
ReadValue = value;
}
public string ReadValue { get; set; }
public bool IsReturn { get; set; }
}