In order to prevent issues with premature disposing, the rule of thumb is that disposable objects should be disposed by whoever created them. It's counterintuitive to split the responsibility of creating/disposing of an object to two different actors.
Forgetting the threading for a second, the general idea would be to do:
ThreadWork thrdwrk = new ThreadWork();
doSomeThings(thrdwrk);
thrdwrk.Dispose();
A using
pattern would be better here:
using(ThreadWork thrdwrk = new ThreadWork())
{
doSomeThings(thrdwrk);
}
However, the threaded nature of your particular case makes it hard to gauge when the object can actually be disposed of. This is a more nuanced consideration based on the surrouding context, which is not clear from your question.
Ideally, you adhere to the rule of thumb. Wait until the thread has finished, then you know you can safely dispose of the object.
Alternatively, if you're convinced that the object should be disposed of by the thread and don't want to implement logic to wait for the thread's completion, then you should be consistent and have the thread create its own disposable object as well.
I see no benefit to creating an object in a scope where its only purpose is to pass it to a lower scope.