A livello di ottimizzazione, io "proteggerei" il codice di lettura del file garantendo la sua chiusura anche in caso di errore; per esemplificare:

codice:
Dim r As New IO.StreamReader(PathFile)
Try
While r.Peek <> -1
  Console.WriteLine(r.ReadLine())
End While
Finally
  r.Close()
End Try
Nel tuo codice, invece, in caso di errore nella lettura del file, questo verrebbe chiuso solo quando il garbage collector passa a distruggere l'oggetto StreamReader che hai creato.

Tralasciando questo aspetto, secondo me il problema che riscontri è dovuto alla "partenza" del tuo codice nel momento in cui il file da leggere si presenta, ma prima che questo sia stato completamente scritto e chiuso dalla routine che lo genera, segnalandoti l'errore che hai indicato.

Forse dovresti adottare un accorgimento. Ad esempio, potresti attribuire un'estensione particolare al file in corso di scrittura e rinominarlo solo quando il processo è concluso, rendendolo quindi visibile all'applicazione che si occupa di prelevarlo.

Fai eventualmente qualche prova specifica, magari scrivendo un file di dati molto corposo e provando a integrare il suggerimento sopra e vedere se il difetto si risolve.

P.S.: usa il tag [CODE ] per formattare il codice!

Ciao!