2010-02-17 3 views
0

나는 System.Drawing.Pen _pen 있습니다.GDI + a에서 "매개 변수가 유효하지 않습니다." 펜 설정에.

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() 

어떤 이유 : 일부 반복에

은 나에게주는 _pen.Width = 3을 설정하는 것입니다?

답변

2

_pen 변수를 삭제 하시겠습니까?

그렇지 않은 경우 의심스러운 리소스 누출 문제가 있음을 나타낼 수 있습니다.

예인 경우, 이는 사용자가 폐기 된 인스턴스에 액세스하고 있음을 나타낼 수 있습니다. GDI 개체는 처리 된 후에 사용하면 ArgumentException을 throw합니다.

+0

예, 저는 Pen 변수를 처리합니다. 아마도 당신은 이유가있을 것입니다. – serhio

0

_pen 변수는 어떻게 초기화합니까? MSDN documentation에 따르면 Pens 클래스를 사용하여 변수를 초기화하는 경우 Width 매개 변수를 설정할 수없는 불변의 Pen이 생성됩니다. 그렇게하려고하면 ArgumentException이 Throw됩니다. 이는 정확히 사용자가보고있는 것입니다.

+0

위에서 언급 한 것처럼 pen.Width 세트는 일부 반복에서 실패합니다. 나는 특별하게 처음이 아니라는 것을 의미한다. _pen = new Pen (Color.Black)과 Pens.Black.Clone() 같은 펜을 만들었습니다. – serhio

0

나는 메모리 누출 문제에서부터 시작한다고 가정하기 시작했다. 외관상으로는 OS는 더 많은 것 10.000 GDI + 목표를 창조한다 ...

어떤 분석이 실행 된 후에 나는 신청에서 거대한 메모리 leack를 검출했다, 그래서 오류는 거기에서왔다.

+0

더 많은 코드를 보내주십시오. 펜은 정확히 어떻게 만들어 졌습니까? –

+0

@Agnel, 내 kbrinley 코멘트를 참조하십시오. – serhio