아래 코드는 내 슬픔의 예입니다. 그것은 프로그램이 충돌하게하는 간단한 OpenFileDialog() 호출입니다. XP에서는 대화 상자가 몇 초 동안 열려있을 때 충돌이 발생합니다. Vista에서는 사용자가 "내 컴퓨터"를 선택하면 충돌이 발생합니다. VS2008에서 디버거가 때때로 stackoverflow 예외를 포착합니다. 첫 번째 줄 (new ...)에 중단 점을 넣으면 vshost.exe가 충돌합니다. ShowDialog() 줄에 중단 점을 넣으면 FatalExecutionEngineError가 발생합니다. vshost없이 컴파일하면 응용 프로그램이 임의의 충돌 (XP 에서처럼 시간이 약간 남을 때)까지 실행됩니다.C# OpenFileDialog의 Stackoverflow/CLR 오류
다른 유형의 파일을 여는 두 개의 열린 대화 상자가 있으며, 세 가지 모두 동일한 동작을합니다. 비슷한 코드가 내 다른 프로젝트에서 같은 동작을 보이지 않습니다.
스레드 아파트는 싱글입니다. ValidateNames = false 설정을 시도했습니다. 디버거는 대부분의 경우 최단 거리에서 벗어납니다.
OpenFileDialog imageDlg = new OpenFileDialog();
imageDlg.Filter = "All Images|*.jpg;*.jpeg;*.png;*.tif;*.tiff;*.bmp|All Files|*.*|JPEGs (*.jpg)|*.jpg|PNGs (*.png)|*.png|TIFFs (*.tiff)|*.tiff|TIFFs (*.tif)|*.tif|BMPS (*.bmp)|*.bmp";
imageDlg.Title = "Select Scan Image";
if (DialogResult.OK == imageDlg.ShowDialog())
{
updateImageDisplay();
}
이벤트 핸들러 코드 :
//
// setScratchImageButton
//
this.setScratchImageButton.Location = new System.Drawing.Point(191, 15);
this.setScratchImageButton.Name = "setScratchImageButton";
this.setScratchImageButton.Size = new System.Drawing.Size(26, 23);
this.setScratchImageButton.TabIndex = 8;
this.setScratchImageButton.Text = "...";
this.setScratchImageButton.UseVisualStyleBackColor = true;
this.setScratchImageButton.Click += new System.EventHandler(this.setScratchImageButton_Click);
코드는이 대화 상자를 표시하는 방법은 어떤 상황에서 호출되고에서
private void updateImageDisplay()
{
if (null != project.srcImage)
{
imageDisplay.SizeMode = PictureBoxSizeMode.Normal;
if (project.srcImage != null)
{
imageDisplay.ClientSize = new Size(project.srcImage.Width, project.srcImage.Height);
imageDisplay.Image = (Image)project.srcImage;
}
this.ScratchImage.Text = project.srcImageLocation;
}
else
{
imageDisplay.Image = null;
this.ScratchImage.Text = "";
}
ImageDisplayPanel.Refresh();
}
+1 - 컨텍스트가 필요합니다. StackoverflowException은 종종 메서드가 너무 많이 호출되는 것을 의미합니다. – keyboardP
폼 디자이너가 생성 한 코드에서 함수가 호출되고 있습니다. 코드는 단일 버튼 클릭으로 인스턴스화됩니다. 이 코드는 코드베이스에 한 번만 이벤트로 추가되었음을 확인했습니다. 함수 이름은 코드에서 두 번 (한 번은 디자이너 코드에서, 한 번은 함수 정의에서) 코드 이름에 정확히 두 번 존재합니다. 파일 저장 대화 상자에서도 동일한 문제가 발생한다고 판단했습니다. 충돌 이전에 20 초 동안 대화 상자가 열려 있습니다. 대화 상자의 인스턴스가 하나만 열려 있는지 확인했습니다. – user253431
@unknown, 이벤트 연결 코드와 updateImageDisplay 코드를 게시 할 수 있습니까? – JaredPar