i suggest you use queue for processing images run this code once
BlockingCollection<string> imageQueue=new BlockingCollection<string>();
new Thread(() =>
{
foreach (string imagePath in imageQueue.GetConsumingEnumerable())
{
ProcessImage(imagePath);
}
}).Start();
and change ProcessFrame Like This
private void ProcessFrame()
{
.....
#region Starting thread For processing Image
imageQueue.Add(VerifyImageFileName);
#endregion
...
}