c#中的强制对话框关闭
本文关键字:对话框 | 更新日期: 2023-09-27 18:05:29
我正在用c#编写一个GIS应用程序。应用程序的一部分允许用户选择KML文件,然后程序将处理该文件。我使用的是OpenFileDialog
,但问题是所有代码都是在对话框关闭之前执行的(在用户确认文件之后)。这需要一段时间,因为程序必须缩放和做其他事情。是否有一种方法来关闭对话框编程之前,我的代码被执行?
编辑:一些代码给那些问的人。
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());
}
听起来对话框实际上是关闭的,但它仍然是"可见的",因为主窗口很忙,还没有重新绘制自己。
的一些想法:
- 简单的方法:在对话框仍然可见的主窗体上调用Refresh()方法。总是在ShowDialog返回后立即调用它。
- 如果加载需要相当多的时间,可能需要创建一个弹出的"加载"对话框,可能有一个取消按钮。使用BackgroundWorker类在后台线程中加载文件。当worker完成后,文件被加载,弹出窗口可以被关闭。记住,在没有适当同步的情况下,不要从后台线程更改用户界面中的任何内容。
编辑:看了代码后,我想我看到了你的问题。您正在处理FileOk事件。这会产生你想要避免的效果。像这样使用对话框:
if (openFileDialog1.ShowDialog() == DialogResult.OK) {
// open file
}
不要使用FileOk事件。我以前从来没有理由使用它……如果你遵循我已经给出的建议,可能会有所帮助。