2017-12-18 10 views
-1

사용자가 만들 경로의 수를 모르기 때문에 ArrayPath 대신 ArrayPath 목록을 사용하려고합니다. 다음과 같이List <GraphicsPath>는 C#에서도 가능합니까?

List<GraphicsPath> PathDB = new List<GraphicsPath>(); 

이 후 나는 목록을 채우기 :

using(GraphicsPath myPath = new GraphicsPath()) 
{ 
    myPath.AddPolygon(myPoints); 
    PathDB.Add(myPath); 
} 

을하지만 Count 속성이 올바른지 동안, 목록에서 GraphicsPath를 사용하려고하면, 나는 아래에 있기 때문에 같은 객체를 사용할 수 없습니다 인수 예외.

num = PathDB.Count; 
for(int k=0; k < num; k++) 
    { 
     using(GraphicsPath myCurrentPath = new GraphicsPath()) 
     { 
     myCurrentPath = PathDB[k]; 
     myCurrentPath.AddLine(0,0,400,400); //at this stage exception is thrown 
     myGraphics.DrawPath(myPen, myCurrentPath) 
     } 
    } 

Disposabe 인 GraphicsPath와 관련이 있습니까? 아니면 smt 잘못하고 있니?

+1

예외는 무엇입니까? 그리고 예, 객체가 삭제되어 더 이상 사용하지 않아야합니다. 그걸로 무엇을 이루고자합니까? –

+1

* * 문장을 사용하는 것은 전혀 이해가되지 않습니다. 물론 그 목록에 저장되어있는 것을 파괴해서는 안됩니다. 목록에서 삭제 될 때 완료되어야합니다. C#은 혼란을 일으키지 않을만큼 똑똑하지만 아마 다른 곳에서도 그렇게 할 것입니다. –

+0

나는 그것을 얻지 않는다. 왜 당신은 루프 내에서'GraphicsPath'의 새로운 인스턴스를 만들고 변수를 기존 값으로 덮어 씁니다 (이전에 처리 했었던)? 그리고 그것을 사용하지 않고 새로 생성 된 값을 버리십시오. 'using'이 실제로 무엇을하는지 (또는 당신의 코드가 그 문제에 대해하는 일) 명확하지 않은 것 같습니다. – Sefe

답변

3
using(GraphicsPath myPath = new GraphicsPath()) 
{ 
    myPath.AddPolygon(myPoints); 
    PathDB.Add(myPath); 
} // this disposes myPath 

로컬 그래픽 경로입니다. using 블록 Dispose 끝나면 범위 뒤에 있습니다. 따라서 블록을 제거하고 더 이상 필요하지 않으면 경로를 처분하십시오.