找回密码
 立即注册

QQ登录

只需一步,快速开始

dawnwind

初级会员

10

主题

43

帖子

396

积分

初级会员

积分
396
dawnwind
初级会员   /  发表于:2016-12-27 16:41  /   查看:6362  /  回复:15
使用AR9.0 VS2015.
程序后台线程中直接调用一函数A(),
A中要自动打印一账票R1,再预览一账票R2,
现象1:执行到预览账票R2时,报错提示线程需要STA :"ShowWindow","呼び出しスレッドは、多数の UI コンポーネントが必要としているため、STA である必要があります。
现象2:将线程改为STA后,执行到预览账票R2时,报“object被另一个线程占用,呼出线程不能访问”错误。
现象3:若将函数A改为INVOKE到UI线程调用,在执行到打印账票R1 时,程序卡死到虚拟打印机保存对话框(鼠标可移动,但对话框上按钮点击无反应)。
  跟踪到代码发现,以下出现问题时,If分支走一次,Else未执行:
Private Sub rptErrList_FetchData(ByVal sender As Object, ByVal eArgs As GrapeCity.ActiveReports.SectionReport.FetchEventArgs) Handles MyBase.FetchData
    If reder.Read = True Then
         xxxxx
        eArgs.EOF = False

    Else
        xxxxx

        eArgs.EOF = True
End Sub

请帮分析原因,提供解决思路,感谢。


15 个回复

正序浏览
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2017-1-4 11:48:29
16#
回复 使用道具 举报
dawnwind
初级会员   /  发表于:2016-12-29 15:18:46
15#
本帖最后由 dawnwind 于 2016-12-29 15:35 编辑

多线程显示窗体demo是可以的 把demo中Report加载相关代码删除 空窗体是可以显示的,你只要说你们的报表不支持在子线程中预览显示就好了。
回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2016-12-29 13:59:55
14#
本帖最后由 Lenka.Guo 于 2016-12-29 15:11 编辑

错误提示是VS抛出的线程冲突问题,代码中线程使用不当导致的,与ActiveReports 的打印和呈现无关,而且报表本身的使用是不支持多线程的。

回复 使用道具 举报
dawnwind
初级会员   /  发表于:2016-12-29 12:45:58
13#
本帖最后由 dawnwind 于 2016-12-29 12:48 编辑

      -----------
回复 使用道具 举报
dawnwind
初级会员   /  发表于:2016-12-29 12:45:54
12#
请问测试结果怎样了 有解决办法么
回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2016-12-28 14:15:25
11#
Demo 收到了,正在测试。
回复 使用道具 举报
dawnwind
初级会员   /  发表于:2016-12-28 12:31:06
10#
demo是现象2的方式

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2016-12-28 11:16:49
9#
那您试着在预览代码后添加报表对象释放,是否能解决问题?,如果实在不行,您把能够重新问题的Demo上传下,我在这边调试并寻找解决方法


  1. rpt.Document.Dispose();
  2. rpt.Dispose();
  3. rpt=null;
复制代码


回复 使用道具 举报
dawnwind
初级会员   /  发表于:2016-12-28 09:55:49
8#
用STA线程方式,显示普通窗体是没问题的,窗体里加载账票就出现现象2提示
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部