悄悄启动Crystal Reports

4

我有一个应用程序,使用Crystal Reports显示各种表单上输入的信息。这个应用程序安装在各种性能规格的客户笔记本电脑上。在某些笔记本电脑上,Crystal Reports可能需要30秒以上才能显示第一份报告,然后它们通常会更快地打开。

如何在我的应用程序启动时预先启动Crystal Reports,以便初始报告的加载时间更快?我现在考虑的方法是在启动时打开一个空报告并将其最小化,然后计时关闭。


谢谢Otiel,做了一个不必要的编辑,包括删除“感谢,Dave K.”,然后删除我的以前的评论,所有这些是为了什么,只是试图在你的名字旁边获得另一个奖牌吗?下次贡献一下,给予帮助如何? - dave k
首先,我不认为这是一个“不必要的编辑”。请参阅http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts。其次,您之前的评论(我假设您在谈论“使用C#,WinForms,VS2010”)也是在*抨击*您的问题,因为它已经出现在标签中,而这就是标签的作用。我只是编辑了您的问题,使其更好,这就是SO的工作方式。您应该接受它,并看到该功能的好处。但是,如果您对我的编辑不满意,请随时回滚,这是您的权利,我不会感到冒犯 :) - Otiel
顺便说一句,我不在乎我的名字旁边的奖章(这里称为徽章)。我相信这次编辑不会让我赢得另一个徽章(也许需要再编辑200次左右才行)。至于“下次你怎么贡献和帮助”,请知道我是那个点赞并收藏了你的问题,因为我遇到了同样的问题。祝你有愉快的一天;) - Otiel
好的,非常感谢您的解释,但这并不会让我在以后的帖子中去掉“谢谢”的礼貌用语。我明白在开头的问候语有一个合理的论点,它是不必要的,并且会减少在主页面上预览帖子时所显示的内容。感谢您(或其它类似的表达)将继续存在,因为我对我发布的问题所得到的任何帮助都心存感激。因此,再次感谢您的建议,Otiel。 - dave k
1个回答

4
在应用程序启动时将CR加载到单独的线程上对我很有效。
        //preload crystal reports on a seperate thread
        Task.Factory.StartNew(() =>
            {
                try
                {
                    using (ReportDocument preloadCrystalReport = new ReportDocument())
                    {
                        preloadCrystalReport.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Reports/Report.rpt"));
                        PrintPreview preloadCrystalGUI = new PrintPreview().Init(preloadCrystalReport);
                        preloadCrystalGUI.Dispose();
                    }
                }
                catch (Exception e)
                {
                    \\log exception
                }

            }, TaskCreationOptions.LongRunning);

在我的情况下,PrintPreview类是一个带有CR控件嵌入其中的对话框。预加载时,我不显示该对话框。

我发现预加载.rpt文件还有助于提高用户体验。


我没有完全使用你给我的内容,但感谢你的建议! - dave k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接