+1  A: 

Use either a custom developed threading model, or the BackgroundWorker.

Let the background thread periodically post events back to your main GUI thread using a delegate handler, take thread safety into account, or using the ProgressChanged event if you are using the BackgroundWorker.

Magnus Johansson
+4  A: 
Anton Gogolev
You could even hide/show the animated gif using a delegate in the background process when said process is running...this seems the simplest solution
sunmorgus
+1  A: 

Instead of writing this

public void DoWork()
{
  try
  {
     this.Cursor = Cursors.WaitCuros;
     DoSomeBigThing();
     . . . .
  }
  catch()
  {
      . . . ..
      . . . . .
  }
  finally
  {
      . . . .
      this.Cursor = Cursors.Default;
  }
}
  1. Create your own mouse cursor (.cur file) with some free tools (Google or Bing for that)
  2. Use AutoWaitCursor and set your mouse cursor to your own created cursor

    Cursor myCursor = new Cursor("myCoolCursor.cur");

Peter Gfader