/// <summary> /// 选择需要发送的文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void bt_BrowserFile_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == DialogResult.OK) { Text_FileMD5.Text = ""; string FilePath = openFileDialog1.FileName; Text_FilePath.Text = FilePath; Text_FileName.Text = System.IO.Path.GetFileName(FilePath); //创建文件流 fileInfo = new System.IO.FileInfo(FilePath); //获取文件大小 Text_FileSize.Text = fileInfo.Length.ToString(); //获取文件包个数(文件总数除以包的大小) Text_PackCount.Text = Convert.ToInt32(fileInfo.Length / (long)Text_PackSize.Value).ToString(); //Text_PackCount.Text = _bagCount.ToString(); //获取最后一个文件包大小 Text_LastPackSize.Text = (fileInfo.Length - Convert.ToInt32(Text_PackCount.Text.Trim()) * (long)Text_PackSize.Value).ToString(); //获取文件的MD5值 //Text_FileMD5.Text = NetClassLibrary.FileTools.GetFileMD5(FilePath); //使用委托来创建新的线程计算文件MD5值;并传递文件路径和返回MD5值 label20.Text = "正在计算文件MD5值..."; FileTools _fileMD5 = new FileTools(); D_MyGetMD5 myMD5 = new D_MyGetMD5(_fileMD5.GetFileMD5); myMD5.BeginInvoke(FilePath, new AsyncCallback(OutMD5), null); } }
/// <summary> /// 定义一个用于显示返回值的函数 /// </summary> /// <param name="result"></param> public void OutMD5(IAsyncResult result) { AsyncResult async = (AsyncResult)result; D_MyGetMD5 Deletget = (D_MyGetMD5)async.AsyncDelegate; ////把文件的MD5值显示在文本框中 //Text_FileMD5.Text = Deletget.EndInvoke(result); //实例化界面更新委托,调用界面跟新函数更新MD5显示文本框 MyInvoke mi = new MyInvoke(UpText); this.BeginInvoke(mi, new object[] { Deletget.EndInvoke(result) }); }