入力とデータベースとの一致に応じてフォルダの束を作成するプログラムを作成しようとしています。 すべて正常に動作しますが、適切な数のフォルダが作成されたことをプログラムで再確認したいと考えています。VB.NETイベントのプライオリティを設定します
Private Sub CreateButton_Click(sender As Object, e As EventArgs) Handles CreateButton.Click
Dim rows As DataRow()
rows = dTable.Select(String.Format("[Pick List ID] = '{0}'", PLTextBox.Text))
Dim sourcePath As String = ""
Dim destPath As String = ""
If rows.Count > 0 And PLTextBox.Text <> "" Then
' Some variable i want to use to count the number of folders created.
folderCount = 0
For Each row As DataRow In rows
Try
...
some logic to specify what the sourcePath and destPath will be
...
' Checking if the directory exists
If Not (Directory.Exists(destPath)) Then
Directory.CreateDirectory(destPath)
End If
' Copy pasting source directory into newly created folder
FileIO.FileSystem.CopyDirectory(sourcePath, destPath)
Catch ex As Exception
MsgBox("Error: " & ex.Message,, "Something went wrong...")
End Try
Next
だからここに、私のすべてのフォルダが作成されたら、私が持っている同じサブにおけるので、私は、右の番号が作成されたことを確認したい:私のフォルダをカウントする
RaiseEvent CreationDone(sender, e)
End Sub
私が使用して、 :
Private Sub FSWatcher_Created(sender As Object, e As FileSystemEventArgs) Handles FSWatcher.Created
folderCount = folderCount + 1
End Sub
そしてCreationDoneイベントです:
Private Sub Creation_Done() Handles Me.CreationDone
Dim rows As DataRow() = dTable.Select(String.Format("[Pick List ID] = '{0}'", PLTextBox.Text))
If folderCount <> rows.Count Then
MsgBox(folderCount & " folders were created. " & rows.Count & " were supposed to be created.",, "Error during the folder creation")
Else
MsgBox(rows.Count & " jobs were created",, "Success!")
End If
End Sub
そして、次の処理が行われます。 私CreateButton_Click
ハンドラは、それが最後にCreationDone
イベントを発生させ、実行されますが、私のFileSystemWatcher
イベントがCreateButton_Click
の実行が完了した後FSWatcher_Created
によって処理されるため、フォルダカウントが更新されない(そうfolderCountはまだ0です)。
CreateButton_Click
が
を実行しているだろうイベントの順序が上昇して処理されていることへのチェックを実行するためにイベントを使用しようとしました
- 1フォルダが
FSWatcher
を作成した1 "作成" イベントを発生させます
次
CreationDone
イベントが発生したCreateButton_Click
は- X
FSWatcher.Created
イベントが CreationDone
に処理され終了
を扱うが、creationdoneが優先にわたって取得されますファイルシステムのイベント。
どうすれば解決できますか?
面白い(編集):フォルダのコピー処理中にthown例外がある場合には、通常folderCount刻み、その例外がFSWatcher
昇給イベントおよび/または私のコードは、それらを処理せています。私は意図的にそれを動作させるために例外をスローする必要がありますか? (または、エラーを表示するためにmsgBox
と表示したときに実行されるかもしれません)
ありがとうございます。
残念ながら、あなたは私の知る限りとして、イベントの優先順位を設定することはできません知っている。コードが実行されている間に作成する必要があるフォルダーの名前を記録し、完了後にフォルダーが存在することを確認する方がよいでしょう。これは、FileSystemWatcherを使用するよりも優れています。これは、別のスレッドで他のフォルダーを作成できるマルチスレッド環境にある可能性があるためです。 –
ありがとう、私はちょうどディレクトリが存在しないことを確認した - それを作成する - ディレクトリが存在する:) – Ali