title: How do I block all keyboard and mouse input to my WinForms app?
body: <p>I have a WinForms app that is retrieving data from a web service on a worker thread and I need to disable all input to my app until the data is loaded.</p>
  
  <p>Currently, I create a semi-transparent form and place it over my application.  When the data call completes I close this overlay form.  This works fine accept that it causes considerable performance problems for users running the application over terminal services.  I tried making the overlay entirely transparent but that still triggers two redraws of the entire window so this did not help at all.</p>
  
  <p>I know that a common recommendation for handling this is to disable all the controls, but that would also redraw much of the screen so I'm looking for another way to block all user input.  Any assistance would be greatly appreciated!</p>
  
  <p>UPDATE:  I should have mentioned that we have considered the modal dialog.  Currently we show the overlay, start the data access thread then construct the form.  If there is no better way to block input (App.BlockInput() might be nice) then we could use the modal dialog idea, but we would need to wait until the form construction had completed and there isn't currently a nice, central location to do this.</p>