I want to add another point to Danny Varod's already good answer, focusing on the question in your last paragraph.
Assuming you're handling the events raised by the multimedia timer or another high-resolution timer, you now need to dispatch your heavy processing task in another thread. .NET's libraries make this relatively easy using the Task Parallelism Library (TPL) if you're using .NET 4.0, or directly using the ThreadPool for earlier versions.
Let's say you have this (very sketchy) code:
private void ProcessImage(object imageToProcess)
{
// Do whatever. Process the image, save the results, etc.
// This is the 1-sec process.
}
private void myTimer_Elapsed()
{
Image capturedImage = myCamera.CaptureImage(); // or whatever.
Task.Factory.StartNew(ProcessImage, capturedImage);
}
This starts a new Task (a wrapper around an asynchronous method) that is launched on a ThreadPool thread. If your machine has multiple CPUs and multiple cores, the ThreadPool will have a lot of available threads, and will process many of these requests in parallel. Hopefully, this will allow the processing tasks to keep up with the image capture tasks. You might have to read up on the threadpool and see how to tweak the available threads for machines with lots of CPUs, but the worst case scenario is that the processing tasks get backlogged, but the threadpool (which is at the heart of the Tasks library) will just queue them up and get to them eventually.
Note, though, that you are not guaranteed that the tasks will be executed in the order they are captured.
If you're using an older version of C#, replace the call to Task.Factory.StartNew with calls to ThreadPool.QueueUserWorkItem, which in this case (where we're not using continuations and aggregated error handling) will be practically identical in usage.