/// <summary>
        /// Updates the display
        /// </summary>
        /// <param name="blocks">List of track blocks</param>
        /// <param name="trains">List of trains</param>
        public void UpdateDisplay(List <TrackBlock> updatedBlocks, List <ITrain> trains)
        {
            if (InvokeRequired)
            {
                Invoke(m_updateDelegate, updatedBlocks, trains);
            }
            else
            {
                //Update the block layout
                if (updatedBlocks != null)
                {
                    this.SuspendLayout();

                    foreach (TrackBlock b in updatedBlocks)
                    {
                        if (m_blockTable.ContainsKey(b))
                        {
                            m_blockTable[b].Invalidate();
                        }
                    }

                    //Upate the train locations
                    foreach (ITrain train in trains)
                    {
                        if (m_trainTable.ContainsKey(train))
                        {
                            TrainGraphic graphic = m_trainTable[train];

                            graphic.Left = System.Convert.ToInt32((train.GetPosition().X - m_layoutPosition.X) * m_scale - graphic.Width / 2);
                            graphic.Top  = System.Convert.ToInt32((train.GetPosition().Y - m_layoutPosition.Y) * m_scale - graphic.Height / 2);
                        }
                        else
                        {
                            //New train, add it to the list
                            TrainGraphic graphic = new TrainGraphic(train);

                            graphic.Location = new Point(System.Convert.ToInt32((train.GetPosition().X - m_layoutPosition.X) * m_scale - graphic.Width / 2),
                                                         System.Convert.ToInt32((train.GetPosition().Y - m_layoutPosition.Y) * m_scale - graphic.Height / 2));

                            graphic.TrainClicked += OnTrainGraphicClicked;
                            graphic.Disposed     += OnTrainDisposed;

                            Controls.Add(graphic);
                            graphic.Visible = true;
                            graphic.BringToFront();
                            m_trainTable[train] = graphic;
                        }
                    }

                    this.ResumeLayout();
                }
            }
        }