Actualización de la interfaz de usuario en C # usando el temporizador

Estoy trabajando para hacer que mi aplicación que lee datos del puerto serie y actualiza un indicador de la interfaz de usuario sea más eficiente y quería pedir algunos consejos sobre mi código que procesa los cambios de la interfaz de usuario. Tengo un temporizador configurado para verificar los datos que se envían al puerto COM y otro temporizador que actualiza la interfaz de usuario con la variable recibida del puerto COM. Básicamente lo que está sucediendo es que estoy rotando un manómetro. Aquí está mi código para manejar los gráficos ...

void timer_Tick(object sender, EventArgs e) //Timer regulates how often the gauge is     updated on the UI
{
    if (pictureBox1.Image != null)
        pictureBox1.Image.Dispose(); // dispose old image (you might consider reusing it rather than making a new one each frame)

    Point test = new Point((int)_xCor, (int)_yCor);
    Image img = new Bitmap(400, 400); // The box tht contains the image <--- Play around with this more
    pictureBox1.Image = img; // Setting the img Image to the pictureBox class?


    Graphics g = Graphics.FromImage(pictureBox1.Image); // G represents a drawing surface
    Matrix mm1 = new Matrix();
    //
    mm1.RotateAt((float)(90 + (((12.5 * state) - 20.95) * 6)), new Point((int)_xrotate, (int)_yrotate), MatrixOrder.Append);
    GraphicsPath gp = new GraphicsPath();
    g.Transform = mm1; // transform the graphics object so the image is rotated
    g.DrawImage(imgpic, test); // if the image needs to be behind the path, draw it beforehand
    mm1.Dispose();// prevent possible memory leaks
    gp.Dispose();// prevent possible memory leaks
    g.Dispose(); // prevent possible memory leaks
    pictureBox1.Refresh();
}

Me pregunto si hay una manera más eficiente de rotar la imagen en la pantalla. Siento que tiene que haber algo pero no puedo entenderlo.

Respuestas a la pregunta(4)

Su respuesta a la pregunta