加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

WinForms ReportViewer挂起应用程序WPF

发布时间:2020-12-15 04:08:15 所属栏目:Java 来源:网络整理
导读:我一直在遇到ReportViewer的一些问题.基本上代码如下: public void Display(object dataSource,ReportViewer viewer) { currentDs = dataSource as MyTypes; if (currentDs != null) { var param = new LinkedListReportParameter(); param.AddFirst(new Re
我一直在遇到ReportViewer的一些问题.基本上代码如下:

public void Display(object dataSource,ReportViewer viewer)
    {
        currentDs = dataSource as MyTypes;

        if (currentDs != null)
        {
            var param = new LinkedList<ReportParameter>();
            param.AddFirst(new ReportParameter("Title","Title"));
            viewer.ProcessingMode = ProcessingMode.Local;
            viewer.LocalReport.ReportEmbeddedResource = ReportName;
            viewer.LocalReport.EnableExternalImages = true;
            viewer.LocalReport.DataSources.Add(new ReportDataSource(DataSourceName + "_Header",currentDs.Header));
            viewer.LocalReport.DataSources.Add(new ReportDataSource(DataSourceName + "_Footer",currentDs.Footer));
            viewer.LocalReport.DataSources.Add(new ReportDataSource(DataSourceName + "_Lines",currentDs.Lines));

            viewer.LocalReport.SetParameters(param);
            viewer.RefreshReport();
        }
    }

问题是,有时它会生成rdlc报告,但其他人只会挂起应用程序.具体来说,它保留在viewer.RefreshReport();永远.

在rdlc文件上正确设置了相应的参数和数据集.

有没有人经历过类似的行为?

提前致谢.

解决方法

我可能已经修好了.这个页面帮我解决了: http://ikriv.com/dev/dotnet/MysteriousHang.html

因此,似乎a)报告查看器需要在UI线程上创建,并且b)并非总是可靠地发生(请参阅链接了解详细信息).报表查看器是.NET 2组件,链接中记录的行为适用于.NET 2.

为了解决这个问题,我使用了以下技巧:

>第一招:在启动时命名UI线程
>第二招:尽早强制处理句柄,然后获取对同步上下文的引用
>第三招:使用线程名称和同步上下文来实现所需的调用 – >调用成语.

如果一切都结合在一起,我会回来发布更多细节.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读