C中的强制对话框关闭#
我正在用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());
}
这听起来像对话实际上是封闭的,但它仍然是“看得见”,因为主窗口忙,还没有粉刷自己呢。
一些想法:
- 最简单的办法:在对话框中仍然可见调用主窗体上的Refresh()方法。总是在ShowDialog返回后立即调用它。
- 如果负载需要相当多的时间,可能希望创建一个弹出“加载”对话框中,可能与一个取消按钮。使用BackgroundWorker类在后台线程中加载文件。工作完成后,文件被加载并且弹出窗口可以关闭。切记不要在没有正确同步的情况下从后台线程更改用户界面中的任何内容。
编辑:在看代码后,我想我看到你的问题。您正在处理FileOk事件。这会产生你试图避免的效果。使用如下对话框:
if (openFileDialog1.ShowDialog() == DialogResult.OK) {
// open file
}
请勿使用FileOk事件。我从来没有理由使用它......也可能有助于遵循我已经给出的建议。
不好猜,+1;) – jgauffin
所以为免生疑问的 - 问题是,用户点击确定,您的应用程序在调用的形式开始处理但对话框仍然可见,即使它已被淡化? – ScruffyDuck
当OpenFileDialog是模态时,应用程序如何继续处理? – jgauffin
我在说,用户选择了一个文件后,有没有什么办法可以隐藏对话框然后处理文件? –
让我改说一下。我读了文件(坐标等),它不需要时间。但在此之后,我想更改地图上图形的颜色,放大以及其他一些东西......不需要该文件。然而,对话保持开放。 –