in winform application,i want use single backgroundworker (or may 1 each form) different tasks on different events. eg: search, loading data in grid, opening new forms, sending emails, file transfer etc.   how can manage in backgroundworker_dowork() ,  backgroundworker_runworkercompleted()  events?   what optimum way/ best practice this?          usually, end caling worker parameter, this:   backgroundworker.runworkerasync(<some argument here>);   then inside dowork method, can retrieve argument e.argument , , according argument is, know want it.   if don't need argument else, can make enum values need, search , load  , forth , pass in, , check value inside dowork choose want do. remember have cast enum inside dowork since e.argument object.   regarding runworkercompleted, can populate e.result value inside dowork, , retrieve inside runworkercompleted method well.   this best way of doing it, , thread safe way.