The main (GUI) thread checks the worker thread to see if it has
finished. This can be done be setting a flag in the worker thread, a
callback function, raising an event, etc. The main thread simply blocks
the user from exiting the application as long as the worker thread is
doing its thing. Of course, the user can cancel the job. The main loop
in teh worker thread constantly looks at the value of a flag (like
Stop). If the value is false, it continues, if not, it breaks from the
loop.
This means that you cannot send or receive the 'large amounts of data'
in one go. Instead, break it up in smaller pieces Use async calls to
WebRequest to do the receiving. For some sample code, see RSS Bandit's
source code. The FotoVision example on MSDN shows how to upload photo's
using a WS.
Sending a message back from the Web Service is to my knowledge
impossible, unless you are calling a WS from a WS and provide a
trackback URL in the original call.
Anyway. What you can do is query the WS with a certain interval to see
if the 'data is good'. In order to do this, the WS needs to return a
string that uniquely identifies the original call, say 'guid'. Then, in
a Timer Click event, you simple call WS.DataIsGood(guid)
Hope this helps.