我在使用 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 线程
  • 第二个技巧:在早期强制一个句柄,然后获取对同步上下文的引用
  • 第三个技巧:使用线程名称和同步上下文来实现所需的调用 -> 调用习惯用法。

  • 如果这一切都成立,我会回来并发布更多详细信息。

    关于wpf - WinForms ReportViewer 挂起应用程序 WPF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15434705/

    10-13 01:30