Я пытаюсь создать приложение, которое показывает онлайн-поезда в picturebox
.
но мое приложение тратит много памяти, и иногда я получаю Out of memory exception
, а иногда мои поезда Disappears
из picturebox
. Чтобы нарисовать онлайн-поезд в первый раз, я рисую карту поездов (линии, станции,...) на picturebox
с размером x=A
и y=b
, после чего я создаю еще один picturebox
с таким же размером и помещаю второй picturebox
на первый picturebox
, используя этот код:
pictureBoxonlineTrain.Parent = pictureBoxMetroMap;
In every second the below function is executed :
public void DrawOnlineTrain()
{
Bitmap map=null;
if (OnlineTrainList.Count > 0)
{
map = new Bitmap(pictureBoxonlineTrain.Size.Width, pictureBoxonlineTrain.Size.Height);
var graph = Graphics.FromImage(map);
foreach (TimeTable t in OnlineTrainList.ToList())
{
// graph.Dispose();
Rectangle rectTrainState = new Rectangle(t.XTrainLocation.Value - 3,
t.YTrainLocation.Value - 3,
15, 15);
graph.FillRectangle(RedBrush, rectTrainState);
graph.DrawString(t.TrainId.ToString(), pictureBoxonlineTrain.Font, Brushes.White, t.XTrainLocation.Value -3, t.YTrainLocation.Value -3);
}
}
pictureBoxonlineTrain.Image = map;
// pictureBoxonlineTrain.Image.Save(@"C:\RailwayShiraz\ShirazMetro\ShirazRailWayWeb\Images\Train.jpg");
}
И я думаю, что это причина моего исключения памяти, потому что каждый раз, когда я создаю объект bitmap
и graphic
. Мой вопрос: как я могу изменить этот код, поскольку объекты размещаются в каждом цикле?
I am trying to create an application that shows the online trains in picturebox
- как всегда, я настоятельно рекомендую вам отказаться от архаичных winforms и использовать правильная технология вместо этого. У вас не будет ни одной из этих проблем, так как, скорее всего, вы просто пытаетесь добиться минимального движения в пользовательском интерфейсе, для которого winforms не подходит. См. Мой пример о том, как легко добиться динамического позиционирования/перемещения элементов пользовательского интерфейса на основе данных с использованием текущей технологии пользовательского интерфейса .Net. . - person Federico Berasategui   schedule 06.07.2014