在c#中执行接口操作时显示等待对话框

本文关键字:显示 等待 对话框 操作 接口 执行 | 更新日期: 2023-09-27 17:50:20

所以我需要在我的程序中做大量的接口操作…更具体地说,填充Windows Forms列表视图并动态生成图像。这不能在其他线程上执行。
那么我如何在我的主WPF窗口上显示一个模态,工作(响应)对话框?
对话框可以是WPF也可以是winforms,我不在乎,我会适应的…

它必须是可用的,并且总是保持在它的所有者表单的上方并在模式上阻塞它。

在c#中执行接口操作时显示等待对话框

只需实现一个对话框,并在耗时的函数中使用. showdialog()调用它。在耗时的循环中,每隔一段时间调用Application.DoEvents()以允许对话框显示和更新。不过,要小心这种方法……

要小心,因为如果,例如,你正在处理一个油漆事件,然后你调用Application.DoEvents(),你可能会进入油漆事件处理程序两次,这是不可取的。

在WPF窗口或WinForm上放置一个图像并插入:http://www.hindustantimes.com/images/loading_gif.gif,它将自动获得动画。显示使用.ShowDialog(OwnerWindow)的窗口,因此它将始终保持在其所有者窗口的顶部。

如果您可以调用Application。DoEvents和它工作,那么这肯定是一种方法。然而,根据我的经验,应用程序。DoEvents通常是一个hack,很少是一个好主意。

我的第一个想法,也许你可以创建一个后台线程来生成你的图像。开始线程并显示模态对话框。对于你的线程,在它创建了一定数量(例如5,10,20,50,无论什么)之后,它将调用事件调度程序并执行一个方法,该方法使用新一批图像更新ListView。因为它只是周期性地调用,所以它会给模态对话框时间来处理它自己的消息。在事件调度程序上调用的函数将接收一个图像列表,调用ListView.BeginUpdate(),遍历列表并创建和添加项,然后调用listview . endpdate ()

还有其他方法可以做到这一点,但我真的会尽量避免Application.DoEvents()(在我的经验中,它是来自不理解线程的Visual Basic程序员的hack)。