2017-08-07 4 views
0

入力とデータベースとの一致に応じてフォルダの束を作成するプログラムを作成しようとしています。 すべて正常に動作しますが、適切な数のフォルダが作成されたことをプログラムで再確認したいと考えています。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です)。

は、私は私が= 1×フォルダに作成するため

  • CreateButton_Click

を実行しているだろうイベントの順序が上昇して処理されていることへのチェックを実行するためにイベントを使用しようとしました

  • 1フォルダが
  • FSWatcherを作成した1 "作成" イベントを発生させます

  • CreationDoneイベントが発生した
  • CreateButton_Click
  • X FSWatcher.Createdイベントが
  • CreationDoneに処理され終了

を扱うが、creationdoneが優先にわたって取得されますファイルシステムのイベント。

どうすれば解決できますか?

面白い(編集):フォルダのコピー処理中にthown例外がある場合には、通常folderCount刻み、その例外がFSWatcher昇給イベントおよび/または私のコードは、それらを処理せています。私は意図的にそれを動作させるために例外をスローする必要がありますか? (または、エラーを表示するためにmsgBoxと表示したときに実行されるかもしれません)

ありがとうございます。

+0

残念ながら、あなたは私の知る限りとして、イベントの優先順位を設定することはできません知っている。コードが実行されている間に作成する必要があるフォルダーの名前を記録し、完了後にフォルダーが存在することを確認する方がよいでしょう。これは、FileSystemWatcherを使用するよりも優れています。これは、別のスレッドで他のフォルダーを作成できるマルチスレッド環境にある可能性があるためです。 –

+0

ありがとう、私はちょうどディレクトリが存在しないことを確認した - それを作成する - ディレクトリが存在する:) – Ali

答えて

1

ないあなたのコードについてはよく分から、あなたはちょうどあなたがこれを行うことができ、特定のディレクトリのフォルダの数を取得しようとしている場合:

Dim folderCount as Integer = Directory.GetDirectories("YourPathway").Length 
関連する問題