سلام
این کدی رو که میزارم فکر نمیکنم بهترین راه برای این کار باشه. ولی خوب چیزیه که به ذهن من رسیده . دوستان اگه راهها بهتری دارن بگن تا بلکه ما هم چیزی یاد بگیریم.
Public Class Form1
'Make new backgroundWorker
Dim WithEvents BG As New System.ComponentModel.BackgroundWorker
'choos source File
Private Sub btnSource_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSource.Click
Dim OpenDialg As New OpenFileDialog
OpenDialg.ShowDialog()
If Not OpenDialg.FileName.Equals(String.Empty) Then
Me.txtSource.Text = OpenDialg.FileName
End If
End Sub
'make dastination file path
Private Sub btnDes_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDes.Click
Dim SaveDialg As New SaveFileDialog
SaveDialg.ShowDialog()
If Not SaveDialg.FileName.Equals(String.Empty) Then
Me.txtDes.Text = SaveDialg.FileName
End If
End Sub
Private Sub btnCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCopy.Click
BG.WorkerReportsProgress = True
BG.RunWorkerAsync()
End Sub
'start copying file
Private Sub BG_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BG.DoWork
Try
Dim FR As New IO.FileStream(txtSource.Text, IO.FileMode.Open)
Dim FW As New IO.FileStream(txtDes.Text, IO.FileMode.CreateNew)
Dim Buffer(FR.Length - 1) As Byte
FR.Read(Buffer, 0, Buffer.Length)
Dim a As Integer = Buffer.Length / 100
Dim Count As Integer = 1
For i As Integer = 0 To Buffer.Length - 1
If i >= a And i Mod a = 0 Then
Count += 1
BG.ReportProgress(Count)
End If
FW.WriteByte(Buffer(i))
Next
FR.Close()
FW.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
'feedback worker progress
Private Sub BG_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BG.ProgressChanged
Me.ProgressBar1.Value = e.ProgressPercentage
Me.lblStatus.Text = e.ProgressPercentage
End Sub
End Class