2012-04-13 98 views
1

我遇到了以下问题与我的自助服务终端应用程序:gui没有更新

我有一个缩略图窗口。当用户点击一个缩略图时,会显示另一个带有信息的窗口(docview),并在中心显示一个文档。

我希望立即看到docview,然后开始加载文档(文档加载需要1-3秒),然后将其添加到接口。

此刻当我点击一个拇指,接口将会冻结一两秒钟,然后docview是已经在文档可见..

这是我做的:

 viewgrid.Children.Add(docView); // the main window uses this grid to display the windows 
     viewgrid.InvalidateVisual(); 
     viewgrid.UpdateLayout(); // at this point I would like to have the docView visible 
     docView.showDocument(); //and afterwards, the loading of the document should start and be also visible eventually.. 

我尝试使用LayoutUpdated事件没有成功..也把showDocument放在一个单独的线程也没有帮助..我也读了Application.DoEvents(),但这已过时,似乎不好的做法无论如何..

我应该如何解决这个问题?

在此先感谢!

回答

0

您需要使用BackgroundWorker对象来加载文档。你说你尝试过线程化,但它不起作用,但你需要让线程工作,并且我建议你使用后台工作程序。 http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker(v=vs.110).aspx

我不知道你是装什么类型的文件,但我使用绑定加载的富文本文件,如下所述: http://www.rhyous.com/2011/08/01/loading-a-richtextbox-from-an-rtf-file-using-binding-or-a-richtextfile-control/

你会做同样的事情,只有你加载文档中一个BackgroundWorker 。文档加载后,您将更新绑定属性,并且UI将更新。

+0

我不认为您完全理解我想要的内容。我想知道的是,如果存在一些“IsRendered”事件,以便我知道当我的布局呈现并可见时,我可以开始加载文档。这个文件本身就是一个简报,由一个microsoft powerpoint interop dll加载。 – Daan 2012-04-16 07:43:37

+0

这里是我的理解。在WPF中有一个用于加载文档的元素。您想立即显示元素,但是为空,然后让文档以后台工作的速度加载。 – Rhyous 2012-04-23 20:21:36

+0

好的,但当背景工作完成之前加载完成后应该怎么做?我无法真正控制的PowerPoint幻灯片。 – Daan 2012-04-24 06:51:43

0

您可以尝试使用异步绑定。或者用另一个线程和Dispatcher手动执行。但这取决于你的ShowDocument在做什么,而且速度很慢。

+0

我该怎么做手动?我可以有一个线程在等待,当docview屏幕可见时,它可以开始加载文件..但我怎么知道屏幕已加载和可见?事件layoutupdated太火了.. – Daan 2012-04-13 14:31:45

+0

我想我不太明白,你的showDocument正在做。从某处缓慢加载文档,然后以某种方式显示它?或者它只是显示一些控件,但是它们的渲染速度很慢& – Nikolay 2012-04-13 14:35:19

+0

showDocument方法将WindowsFormHost添加到docview。然后使用Microsoft Office Interop dll加载文档,并使用SetParent调用将此文档放在windowsformhost中。 – Daan 2012-04-13 14:41:05