Here's a code sample for the System.ComponentModel.BackgroundWorker class. private static BackgroundWorker worker = new BackgroundWorker (); static void Main ( string [] args) { worker. DoWork += worker_DoWork; worker. RunWorkerCompleted += worker_RunWorkerCompleted; worker. ProgressChanged += worker_ProgressChanged; worker. WorkerReportsProgress = true ; Console . WriteLine ( "Starting application." ); worker. RunWorkerAsync (); Console . ReadKey (); } static void worker_ProgressChanged ( object sender, ProgressChangedEventArgs e ) { Console . WriteLine ( "Progress." ); } static void worker_DoWork ( object sender, DoWorkEventArgs e ) { Console . WriteLine ( "Starting doing some work now." ); for (int i = 0 ; i < 5 ; i++) { Thread . Sleep ( 1000 ); worker. ReportProgress (i); ...