I think you need to set the KeyPreview property to True to get all keystrokes.
If you mean that your method executes for quite some time, then this means that the message loop that deals with application messages (like a keystroke) isn't handled. If it would take to long, you would also get the "(not responding)" in the taskmanager.
You could execute your method in a thread. The most basic way to do this is:
new Thread (new ThreadStart (SomeObject.SomeMethod)).Start();
The code above doesn't maintain a reference to the thread, but it's just a simple example.
Here is some extra reference:
It is also important to know that Invoke must be used if you would like to do some screen updating from a thread:
Some info on how to control the thread:
You could also do without threads and bloat your methods with an excessive amount of
to ensure the message loop is handled. This is however quite dangerous and error prone. Every save person will advise against the use of this hack... so, be warned!