Actually, this probably wouldn't work. Since you're requesting initial ownership in the same thread, the call to WaitOne() (or its equivalent in the constructor that requests initial ownership) will pass. Read the docs on Mutexes and you'll see that a thread can request access to a Mutex multiple times without blocking. I'm not sure how you're threading your file processing procedure (which is a good idea to do, btw), but doing them in the same thread would not work. Instead, take a look at the SyncRoot keyword in Visual Basic. Basically, declare a shared variable somewhere in your class:
Private Shared syncRoot As Object = New Object()
Then, in both methods, you can do the following (although there's no timeout, but these keywords boil down to a Monitor at compile time, so take a look at that for more details):
SyncLock (syncRoot)
' Do work
End SyncLock
Hope this helps.
Reminiscent of my younger years... 10 LOAD "SCISSORS" 20 RUN