양식에 슬라이드 쇼로 표시되는 이미지를 순환하는 Windows Form이 있습니다. 이 작업을 수행하는 방식은 Panel에있는 폼의 크기를 제어하고 메모리에있는 Image 개체를 그리는 이벤트 처리기를 추가하는 것입니다. 새로운 이미지로드 _image에 의해 참조되는 페인트 이벤트 핸들러가 몇 번의 반복 후에 실행을 중지합니다.
void panel_Paint(object sender, PaintEventArgs e)
{
if (_bShowImage)
{
Point leftCorner = new Point((this.Bounds.Width/2) - (_image.Width/2), (this.Bounds.Height/2) - (_image.Height/2));
e.Graphics.DrawImage(_image, leftCorner);
_bShowImage = false;
}
}
, 나는 다시 그리기 패널을 강요 해요 :
_bShowImage = true;
_panel.Refresh();
을 직후, 이미지 배치와 글로벌 변수에서 역 참조 :
를_image.Dispose();
_image = null;
잠시 동안, 예를 들어 5 회 반복되는 것을 보았습니다. 그런 다음 panel_Paint() 핸들러가 호출되지 않습니다. 디스플레이에 2-3 개의 JPG를 사용하고 있는데 처음 x 시간 동안 잘 보였으므로 손상되지 않았 음을 알았습니다. 나는 잘 실행되는 패널의 Refresh() 메소드 주위에 디버그 라인을 넣었다. 그것은 마치 핸들러에 대한 호출이 삭제 된 것과 같습니다. 누구든지 전에이 문제가 발생 했습니까?
PictureBox를 사용하지 않는 이유가 있습니까? 조금씩 다시 칠해야 할 때마다 이런 식으로 전체 이미지를 그리는 데 오버 헤드가 발생합니다 ... 직접 작업 할 경우 다시 그려야 할 영역에주의를 기울이는 것이 좋습니다. PaintEventArgs에서 가져옵니다. –