I know the last post was very long ago, but I had the same problem and think I have a solution. I was coding everything in separate threads and allowing Main() to end, with the remaining threads actually doing the work. With a lot of trial and error, I finally decided to let Main() live forever, even though the thread had no work left to be done. Once I placed Thread.Sleep(Timeout.Infinite); at the end of Main(), I have never had to reset my USB connection. Hope this is helpful.
Would you please post an example of code for this?
I attempted to add it and get an warning "unreachable code"