私は、間違った方法で問題に取り掛かったと思います。私はUSBドライブにファイルをコピーするための信頼できる進捗バーを取得しようとしています。私の問題は、私のアプローチでは、それは動作しますが、信頼できないことは、ファイル作成イベントがファイルの書き込みが完了する前にトリガされるので、必要な情報を表示することです(ディレクトリコピーの場合はマルチ処理され、すぐしかしusbのdirveが遅い(USB 2.0)で遠く長い場合は特にために記述します。以下は、私のアプローチがあるが、私はこの問題を解決するためのより良い方法がなければならないと確信している。ディレクトリのコピー(サブディレクトリを含む)の進捗バー
Public counterLocalFiles As String
Private Sub CopyUSB
fsw_USB = New IO.FileSystemWatcher(Path)
fsw_USB.IncludeSubdirectories = True
fsw_USB.EnableRaisingEvents = True
UpdateProgressBarMaximum2(CInt(counterLocalFiles))
counterLocalFiles = System.IO.Directory.GetFiles(SourcePath,
My.Computer.FileSystem.CopyDirectory(SourcePath, Path)"*.jpg*", SearchOption.AllDirectories).Length
End Sub
Private Sub fsw_USB_Created(sender As Object, e As FileSystemEventArgs) Handles fsw_USB.Created
Dim counterUSBFiles = IO.Directory.GetFiles(Path, "*.jpg", SearchOption.AllDirectories).Length
UpdateProgressBar2(CInt(counterUSBFiles))
UpdateLabelText2(CStr(counterUSBFiles) & " von " & CStr(counterLocalFiles))
End Sub
Private Sub UpdateProgressBarMaximum2(Maximum As Int32)
If ProgressBar2.InvokeRequired Then
ProgressBar2.Invoke(New Action(Of Integer)(AddressOf UpdateProgressBarMaximum2), Maximum)
Else
'We are on the UI thread so update the control.
ProgressBar2.Maximum = Maximum
End If
End Sub
Private Sub UpdateProgressBar2(Value As Int32)
If ProgressBar2.InvokeRequired Then
ProgressBar2.Invoke(New Action(Of Integer)(AddressOf UpdateProgressBar2), Value)
Else
'We are on the UI thread so update the control.
ProgressBar2.Value = Value
End If
End Sub
あなたがのためのUIオプションが存在しているはず...必要な修正CopyDirectoryプロセス? 'UIOption.AllDialogs'を使って' FileSystem.CopyDirectory(sourcePath、destinationPath、 UIOption.AllDialogs) 'はウィンドウコピーの進行状況ダイアログを表示します。 –
実際に私はそれを知っていませんでした、私はちょっとでもそれを暗示したいと思います。私は一度に複数のファイルコピーを作成するので(バックグラウンドワーカーには2〜3人)、一度にすべてのファイルコピーを見るほうが簡単です。しかし、私はおそらくquickar workurouindのおかげで:) – Alex
より多くのコントロールとより正確なコピープロセスを望むなら、 'FileSystemWatcher'なしでそれを行う方法がありますが、もっと複雑です。 'CopyDirectory'を実行する代わりに、あなたが行くごとにディレクトリを個別に作成する各ファイルをコピーします。さらに正確にするためには、filesize、コピーする各ファイルのバイトを読み書きするために 'FileStream'を使用してコピーが必要なすべてのリストを取得し、進行状況を更新することができます。バックグラウンドワーカーと一緒にUIを更新しました。 –