Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# gui未更新_C#_Wpf_User Interface - Fatal编程技术网

C# gui未更新

C# gui未更新,c#,wpf,user-interface,C#,Wpf,User Interface,我的kiosk应用程序遇到以下问题: 我有一扇有缩略图的窗户。当用户单击缩略图时,将显示另一个包含信息的窗口(docview),并在中心显示一个文档 我想让docview立即可见,然后开始加载文档(文档加载需要1-3秒),然后将其添加到界面中 当我点击一个拇指时,界面会冻结一两秒钟,然后文档已经可以看到docview 我就是这么做的: viewgrid.Children.Add(docView); // the main window uses this grid to disp

我的kiosk应用程序遇到以下问题:

我有一扇有缩略图的窗户。当用户单击缩略图时,将显示另一个包含信息的窗口(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()的文章,但这是不推荐的,而且似乎是不好的做法

我应该如何解决这个问题


提前谢谢

您可以尝试使用异步绑定。或者使用另一个线程和调度程序手动执行。但这取决于您的ShowDocument正在执行且速度较慢。

您需要使用BackgroundWorker对象来加载文档。你说你试过线程,但它不起作用,但你需要让线程工作,我建议你使用后台工作人员。

我不确定您正在加载哪种类型的文档,但我使用绑定加载了RichText文件,如下所述:


只有将文档加载到BackgroundWorker中,才能执行相同的操作。加载文档后,您将更新绑定属性,UI将更新。

我将如何手动执行此操作?我可以让一个线程等待,当docview屏幕可见时,它可以开始加载文档。但是我如何知道屏幕已加载且可见?事件布局更新太快。我想我不太明白您的showDocument正在做什么。慢慢地从某处加载文档,然后以某种方式显示它?。或者它只是显示一些控件,但它们的呈现速度很慢&showDocument方法将WindowsFormHost添加到docview中。然后使用Microsoft Office Interop DLL加载一个文档,并使用SetParent调用将此文档放入windowsformhost。我想你还不太明白我想要什么。我想知道的是,是否有某个“IsRendered”事件,以便我知道当我的布局呈现并可见时,我可以开始加载文档。文档本身是一个powerpoint,由microsoft powerpoint interop dll加载。以下是我的理解。您在WPF中有一个加载文档的元素。您希望立即显示元素,但为空,然后在backgroundworker中以自己的速度加载文档。好的,但是当backgroundworker提前完成加载时,我应该怎么做?我真的无法控制powerpoint dll..你是对的!我通过启动powerpoint dll并在启动gui时使用backgroundworker加载文件来实现它,加载完成后,gui将更新。谢谢