Bir fonksiyonum BackgroundWorker' da verilen klasörde recursive olarak uzun işlemler yapıyor. Daha sonradan uygulamaya sürükle bırak (drag & drop) desteği ekleyince birden aynı anda birden fazla klasör eklenebilir oldu. Bu da bir hataya neden oldu, çünkü tarama işlemi bir öncekini iptal ediyor ve son gelen klasör için çalışıyordu sadece. Şu şekilde bir çözüme gittim,
Global bir Queue objesi oluşturdum,
Dim ScanQue As New Queue()
Tarama kısmında eğer tarama aktifse yeni gelen taramayı queue' ye ekledim
If ScanActive Then ScanQue.Enqueue(File) : Exit Sub
Tarama işlemi bitince çalışan fonksiyonada eğer queue boş değilse bir sonraki objeye geç dedim.
If ScanQue.Count > 0 Then StartScan(DirectCast(ScanQue.Dequeue, String))
Collection objemin FIFO veya LIFO olması benim için pek önemli değildi ama FIFO genelde daha mantıklı, dolayısıyla Queue iyi bir seçim oldu.