В GDI + «Параметр недействителен». по настройке пера. Ширина - PullRequest
0 голосов
/ 17 февраля 2010

У меня есть System.Drawing.Pen _pen.

Когда в некоторых итерациях устанавливается _pen.Width = 3, это дает мне:

System.ArgumentException 
  Message="Parameter is not valid."
  Source="System.Drawing"  - System.Drawing.dll
  StackTrace:
       at System.Drawing.Pen.set_Width(Single value)
       at MyProject.ctlPanneauGraphique.CustomLine.set_BorderWidth(Int32 value) in 
       ....
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       at MySolution.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
       at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()

Что и почему?

Ответы [ 3 ]

2 голосов
/ 18 февраля 2010

Вы используете переменную _pen?

Если нет, это может указывать на проблему утечки ресурса, как вы и предполагали.

Если да, это может означать, что вы обращаетесь к удаленному экземпляру.Объекты GDI часто выдают ArgumentException при использовании после их удаления.

0 голосов
/ 18 февраля 2010

Я начал предполагать, что это связано с проблемой утечки памяти. Очевидно, ОС не может создать более 10.000 объектов GDI + ...

После некоторого анализа я обнаружил огромную утечку памяти в приложении, поэтому возникла ошибка.

0 голосов
/ 17 февраля 2010

Как вы инициализируете переменную _pen? Согласно документации MSDN , если вы используете класс Pens для инициализации своей переменной, вы получите неизменное перо, параметр Width которого не может быть установлен. Попытка сделать это приведет к созданию исключения ArgumentException, которое именно то, что вы видите.

...