Update:
I removed the HighQualitiy like Ed said and i get better preformence.
Here are some tests:

I must add that i use AForge to get the MJPEG Stream from a webcam and the event raises everytime i get a frame from the Stream.
Now i still get my problem, i get 320x240 frame from the webcam, when i drawing that in normal size i get 3300ms (per 100 frames) i get zero delay when i clap my hands infront of the camera. and when i'm drawing it Full Screen i get 4500ms thats ok, 4500ms it's still good for 100 frames but i get like 3 seconds delay when i clap my hands infront of the camera..
All these test results are according to my new code:
delegate void videoStream_NewFrameDelegate(object sender, NewFrameEventArgs eventArgs);
public void videoStream_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
if (ready)
{
if (this.InvokeRequired)
{
videoStream_NewFrameDelegate del = new videoStream_NewFrameDelegate(videoStream_NewFrame);
this.Invoke(del, new object[] {sender, eventArgs} );
}
else
{
if(!sw.IsRunning)
sw = Stopwatch.StartNew();
this.FPScount++;
Rectangle rc = ClientRectangle;
Bitmap bmp = new Bitmap(rc.Width, rc.Height);
Graphics g = Graphics.FromImage((Image)bmp);
g.DrawImage(eventArgs.Frame, rc.X+10, rc.Y+10, rc.Width-20, rc.Height-20);
g.Dispose();
this.Image = (Image)bmp;
}
}
}
protected override void OnPaint(System.Windows.Forms.PaintEventArgs pe)
{
base.OnPaint(pe);
this.calc = fps.TotalMilliseconds;
if (this.FPScount >= 100 && this.sw.IsRunning)
{
this.fps = TimeSpan.FromMilliseconds(sw.ElapsedMilliseconds);
this.FPScount = 0;
this.sw.Reset();
}
}