What you need is Asynchronous method invocation (Using BeginEnvoke and EndInvoke) and use IAsyncResult to get the result. You need to use a delegate to invoke the method (The delegate will have matching signature with the method, that will accept parameter). Internally, your asynchronous method invocation will use a thread from the thread pool.
See
Asynchronous Method Invocation[
^] for details.