.NET 런타임과 관련된 것으로 보이는 그래픽 문제가 있습니다. 가끔씩, 모든 GroupBox의 테두리와 응용 프로그램의 모든 NumericUpDowns의 화살표가 사라집니다. NumericUpDowns에는 때때로 화살표가 있어야하는 그래픽 쓰레기가 있기 때문에 어떤 이유로 다시 그리기를 중지 한 것 같습니다.GroupBoxes 및 NumericUpDowns의 .NET 그래픽 문제
우리는 응용 프로그램을 여러 번 다시 시작한 후에 오류가 발생했다고 생각합니다. 문제가 발생하면 응용 프로그램을 다시 시작해도 도움이되지 않습니다. 그러나 모든 .NET 프로세스를 닫고 응용 프로그램을 다시 시작하면 문제가 사라지며 .NET 런타임의 문제를 지적합니다.
우리의 응용 프로그램은 VS 2008 SP1 및 대상 .NET 3.5를 사용하여 개발 된 WinForms 응용 프로그램입니다. 클래식 모드 (클라이언트 회사 정책)로 Windows XP SP3에서 실행됩니다.
비슷한 문제가있는 다른 항목을 검색했지만 대부분의 조회수에는 GroupBox에 대한 맞춤 페인트 이벤트가 포함됩니다. 우리의 컨트롤은 일반 표준이며 아무 페인트 이벤트도 전혀 사용되지 않습니다.
편집 : 어떻게 고의적으로 문제를 재현하기 위해 데스크톱 힙 소모 할 수 있습니다? 나는 작업 관리자와 GdiUsage로 놀고 있었고, 펜, 브러시, 글꼴은 미친 듯이 만들었습니다. 물론 처분을 호출하지 않고 가비지 수집을 피하기 위해 목록에 저장합니다. 하지만 임의의 색상으로 100,000 개의 펜을 만든 후에는 모니터 도구에 따라 몇 가지 개체 만 있습니다.
List<Pen> pens = new List<Pen>();
Random rnd = new Random();
for(int i = 0; i < 100000; i++)
pens.Add(new Pen(Color.FromArgb(rnd.Next())));
펜 목록이 범위를 벗어나면 모든 펜을 가비지 수집 할 수 있습니다. 리스트를 로컬 변수의 insted 클래스에 저장하십시오. –
예제가 약간 명확하지 않지만 목록은 실제로 클래스에 저장됩니다. – Anlo