Exemplo n.º 1
0
        /// <summary>
        /// 接收数据
        /// </summary>
        /// <param name="connectParam">连接参数</param>
        private void ReceiveData(ConnectParam connectParam)
        {
            Dispatcher.Invoke(new Action(() =>
            {
                Grid.SetRow(receiveStatus, 1);
                Grid.SetRow(connStatus, 2);
            }), System.Windows.Threading.DispatcherPriority.Normal);

            viewModel.FileName = connectParam.br.ReadString(); //文件名

            long   fileSize   = connectParam.br.ReadInt64();   //文件大小
            string fileSize_m = ChangeToSize(fileSize);        //转换为MB

            using (connectParam.fs = new FileStream(connectParam.tempPath + viewModel.FileName, FileMode.Create))
            {
                byte[] buffer = new byte[connectParam.bufferSize];

                connectParam.StartTimer(); //开启计时器

                while (connectParam.readL < fileSize)
                {
                    connectParam.size = connectParam.br.Read(buffer, 0, connectParam.bufferSize);
                    connectParam.fs.Write(buffer, 0, connectParam.size);
                    connectParam.readL += connectParam.size;

                    viewModel.FileSize = ChangeToSize(connectParam.readL) + "/" + fileSize_m;
                    if (connectParam.sec != 0)
                    {
                        long downSpeed = connectParam.readL / connectParam.sec;

                        viewModel.DownSpeed = ChangeToSize(downSpeed) + "/S";                                                              //速度
                        viewModel.LeftTime  = new TimeSpan(0, 0, Convert.ToInt32((fileSize - connectParam.readL) / downSpeed)).ToString(); //剩余时间
                    }
                    viewModel.PgBarValue = String.Format("{0:N1}", (double)connectParam.readL * 100 / fileSize);
                }
            }

            connectParam.StopTimerAndClose();

            DecompressFile(connectParam);
        }