I think you need to set the KeyPreview property to True to get all keystrokes.
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.aspx[
^]
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:
using System.Threading;
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:
http://www.yoda.arachsys.com/csharp/threads/[
^]
http://www.yoda.arachsys.com/csharp/threadstart.html[
^]
It is also important to know that Invoke must be used if you would like to do some screen updating from a thread:
http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx[
^]
Some info on how to control the thread:
http://msdn.microsoft.com/en-us/library/7a2f3ay4%28VS.80%29.aspx[
^]
You could also do without threads and bloat your methods with an excessive amount of
Application.DoEvents();
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!
Good luck!