異步方法讀取網絡路徑 異步讀取文件字符流

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; }
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章