2011-08-12 9 views
1

에 닫습니다. C#에서 GIS 응용 프로그램을 작성하고 있습니다. 응용 프로그램의 일부는 사용자가 KML 파일을 선택할 수있게 해주고 프로그램은 그 파일을 처리합니다. OpenFileDialog을 사용하고 있지만 문제는 대화 상자가 닫히기 전에 (그리고 사용자가 파일을 확인한 후에) 모든 코드가 실행된다는 것입니다. 프로그램이 줌과 다른 일을해야하기 때문에 꽤 시간이 걸립니다. 코드가 실행되기 전에 대화 상자를 프로그래밍 방식으로 닫는 방법이 있습니까?강제 대화 상자를 C#

편집 : 물어 보는 사람들을위한 코드. 대화 상자가 실제로 폐쇄처럼

private void OnKMLFileSet(object sender, CancelEventArgs e) 
{ 
    Polygon polygon = KmlToPolygon(openFileDialog2.FileName); 
    // After this, I no longer need the file, but the dialog stays open until the end of the method 
    Graphic graphic = new Graphic(); 
    graphic.Geometry = polygon; 
    textBox1.Text = string.Format("{0:n}", CalculateAreaInSqKilometers(polygon)).Split('.')[0]; 
    textBox2.Text = string.Format("{0:n}", CalculateAreaInSqMiles(polygon)).Split('.')[0]; 
    textBox3.Text = string.Format("{0:n}", CalculateAreaInSqKnots(polygon)).Split('.')[0]; 
    Note polyInfo = new Note("Polygon with nautical area: " + textBox3.Text, polygon); 
    map.Map.ChildItems.Add(polyInfo); 
    map.ZoomTo(polygon.GetEnvelope()); 
} 
+1

OpenFileDialog가 모달 인 경우 응용 프로그램을 계속 처리 할 수 ​​있습니까? – jgauffin

+0

사용자가 파일을 선택한 후에 대화 상자를 숨기고 파일을 처리 할 수있는 방법이 있습니까? –

+0

내가 다시 말해 보겠습니다. 시간이 필요없는 파일 (좌표 등)을 읽었습니다. 그러나 그 후지도에서 그래픽의 색상을 변경하고 확대/축소하고 파일을 필요로하지 않는 몇 가지 작업을 수행하려고합니다. 대화 상자는 열린 상태로 유지됩니다. –

답변

5

그것은 소리지만, 메인 윈도우가 사용 중이 아직 자체를 다시 칠하지 않았기 때문에 여전히 "볼 수"입니다.

몇 가지 아이디어 :

  • 쉬운 방법 : 대화 상자가 계속 표시입니다 기본 폼에 Refresh() 메서드를 호출합니다. 항상 ShowDialog 반환 후 즉시 호출하십시오.
  • 로딩에 꽤 시간이 걸리는 경우 취소 버튼을 사용하여 팝업 "로드 중"대화 상자를 만드는 것이 바람직 할 수 있습니다. BackgroundWorker 클래스를 사용하여 백그라운드 스레드에서 파일을로드하십시오. 작업자가 완료되면 파일이로드되고 팝업 창이 닫힙니다. 적절한 동기화가없는 상태에서 백그라운드 스레드에서 사용자 인터페이스의 내용을 변경하지 마십시오.

편집 : 코드를 살펴본 후 문제가 발생했다고 생각합니다. FileOk 이벤트를 처리하고 있습니다. 이것은 피해야 할 효과가 있습니다. 다음과 같이 대화 상자를 사용하십시오.

if (openFileDialog1.ShowDialog() == DialogResult.OK) { 
    // open file 
} 

FileOk 이벤트를 사용하지 마십시오. 나는 전에 그것을 사용할 이유가 없었습니다 ... 또한 제가 이미 준 조언을 따르는 것이 도움이 될 수도 있습니다.

+0

좋은 추측, +1;) – jgauffin

+0

의심의 여지를 피하기 위해 문제는 사용자가 확인을 클릭하고 애플리케이션이 호출 양식에서 처리를 시작한다는 것입니다. 대화 상자가 흐려졌더라도 표시됩니다. – ScruffyDuck

관련 문제