Я новичок в c # и пытаюсь учиться, написав несколько простых приложений для знакомства с синтаксисом и библиотекой .NET.Самый последний минипроект, который я взял, - это полярные часы , подобные найденным здесь .
Одна из проблем, которые я заметил ранее, заключалась в том, что приложение постоянно "мерцало", что действительноот презентации, поэтому я прочитал в Интернете о том, как реализовать двойной буфер, который устранил эту проблему, но может иметь или не иметь какое-то отношение к проблеме.Вот мой onPaint
метод;он вызывается каждые 33 мс (~ 30 FPS) с помощью таймера.Большая часть остального приложения - это просто обработчики для перетаскивания приложения (поскольку оно безрамное и с прозрачным фоном), выход при двойном щелчке и т. Д.конец метода я буду в безопасности, но, похоже, это не поможет.Кроме того, интервал между временем выполнения и OutOfMemoryException не является постоянным;однажды это произошло всего через несколько секунд, но обычно это занимает минуту или две.Вот несколько общеклассовых объявлений переменных.
private Bitmap _backBuffer;
private float startAngle = -91F;
private float brushWidth = 14;
private float spaceStep = 6;
И снимок экрана (правка: ссылки на снимок экрана с представлением кода):
Снимок экрана http://www.ggot.org/inexplicable/pc2.jpg
РЕДАКТИРОВАТЬ: Stacktrace!
System.OutOfMemoryException: Out of memory.
at System.Drawing.Graphics.CheckErrorStatus(Int32 status)
at System.Drawing.Graphics.DrawArc(Pen pen, Single x, Single y, Single width, Single height, Single startAngle, Single sweepAngle)
at PolarClock.clockActual.OnPaint(PaintEventArgs e) in C:\Redacted\PolarClock\clockActual.cs:line 111
at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)
at System.Windows.Forms.Control.WmPaint(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Кажется, что это та же самая строка, на которой произошел сбой в последний раз, основной drawArc
внутри цикла.