Il problema è assai diffuso e dipende dal fatto che il Timer gira su un thread diverso rispetto alla GUI. La soluzione è usare il metodo Invoke del controllo, come si vede in questa pagina di MSDN.