加载数据时如何用Gtk#显示进度对话框?

时间:2010-06-24 08:45:28

标签: c# mono gtk#

我有主窗口,按钮“打开文件”。单击文件选择器对话框出现,然后加载文件。我想在加载数据时显示进度对话框。但是,当我调用Run

dlg.Run();
load_data(); // not executed

如果我调用Show

,执行就会停止(我必须关闭对话框以加载数据)
dlg.Show();
load_data();

然后加载完成,但对话框没有显示。

那么,如何显示模态,进度对话框并同时加载数据?

注意:这个问题只是关于显示进度对话框,而不是更新进度条小部件。

2 个答案:

答案 0 :(得分:2)

如果您只想显示UI然后加载数据而不处理事件,则以下操作将起到作用:

while (Gtk.Application.EventsPending ())
    Gtk.Application.RunIteration ();

你可以把它放在一个方法“FlushEvents”中,然后在显示对话框后调用它,你也可以在加载数据时让它每隔一段时间运行一次,让用户点击取消。

实际上,您可能希望使用线程或推送事件,或者在空闲处理程序中逐步加载。有关更多信息,请参阅此文档:

http://www.mono-project.com/Multi-threaded_GtkSharp_Programing_and_Keeping_your_Application_Responsive

答案 1 :(得分:0)

好的,我询问了gtk#mono newsgroup,感谢Chris Howie,我终于完成了任务。

简而言之 - 因为也许某人也会陷入其中:

  • 您创建了一个对话框
  • 您创建任务
  • 在新创建的任务中显示对话框,进行计算(并刷新对话框),然后销毁对话框

因为对话框是模态的,所以你甚至不必担心等待任务完成 - 它已经由Gtk#完成了。