It is easier to manage disabling certain controls by placing them inside a panel and disabling that panel rather than disabling individual controls:
controlPanel.Enabled = false;
A common way to block other tasks, that may meet your needs, is by showing a top most form with a progress bar. I've implemented this in the past with success. Other programs do the same thing. For example, in WinRAR, when the applciation is busy extracting or compressing files, the application shows a top most form. It looks like a "modal" form, but in fact, you can still click on the other functions, to which WinRAR asks, "Do you wish to abort the current operation?"
Disabling the entire application is often not necessary and may not be intuitive. So, ask yourself if you really need to block interaction with the form. For example, I have an application that takes some time to complete certain tasks. I provide a progress bar indicator for that particular piece of work, but you can still interact with the application to start additional tasks that run simultaneously. Even if I only allowed you to perform a single task at a time, you still may want to view the help file or set application preferences while the task was running. In addition, I give the user a button that allows them to stop the task. Disabling the form would prevent this type of interaction.