找回密码
 立即注册

QQ登录

只需一步,快速开始

dawnwind

初级会员

10

主题

43

帖子

396

积分

初级会员

积分
396
dawnwind
初级会员   /  发表于:2016-12-27 16:41  /   查看:6269  /  回复: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 个回复

倒序浏览
dawnwind
初级会员   /  发表于:2016-12-27 17:04:10
沙发
[attachimg]现象2错误提示[/attachimg]

本帖子中包含更多资源

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

x
回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2016-12-27 17:19:33
板凳
您的意思是,报表R1在后台打印中,加载报表R2???

回复 使用道具 举报
dawnwind
初级会员   /  发表于:2016-12-27 18:03:28
地板
不是,R1先打印,打印完后,预览显示R2 (ShowDialog)
回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2016-12-27 18:09:22
5#
dawnwind 发表于 2016-12-27 18:03
不是,R1先打印,打印完后,预览显示R2 (ShowDialog)

打印的方法和报表显示的具体代码是什么?

我觉得看AR 提供Document.Print 方法,
public System.bool Print(
   System.bool showPrintDialog,
   System.bool showPrintProgressDialog,
   System.bool usePrintingThread
)
您把第三个参数修改下,看看效果
回复 使用道具 举报
dawnwind
初级会员   /  发表于:2016-12-27 19:08:09
6#
Lenka.Guo 发表于 2016-12-27 18:09
打印的方法和报表显示的具体代码是什么?

我觉得看AR 提供Document.Print 方法,

感谢提供方法,使用Case3,并把Print第三个参数改为true后,R1卡死现象没出现了,但出现R2卡死现象,账票预览显示了,但点击账票上按钮无反应,无法关闭/打印张票。
回复 使用道具 举报
dawnwind
初级会员   /  发表于:2016-12-27 19:11:47
7#
                 打印账票的方法:
                var sectionDocument = objReport.Document;
                if (blnUsePrintThread)
                {
                    sectionDocument.Print(false, false, true);
                }
                else
                {
                    sectionDocument.Print(false, false, false);
                }  
                 预览显示方法:
                   WinReportViewer mainWindow = new WinReportViewer(objReport);
                    mainWindow.Title = strTitle;
                    mainWindow.ShowDialog();
                    mainWindow.Activate();
                    PrintFlg = mainWindow.PrintFlg;
回复 使用道具 举报
dawnwind
初级会员   /  发表于:2016-12-28 09:55:49
8#
用STA线程方式,显示普通窗体是没问题的,窗体里加载账票就出现现象2提示
回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2016-12-28 11:16:49
9#
那您试着在预览代码后添加报表对象释放,是否能解决问题?,如果实在不行,您把能够重新问题的Demo上传下,我在这边调试并寻找解决方法


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


回复 使用道具 举报
dawnwind
初级会员   /  发表于:2016-12-28 12:31:06
10#
demo是现象2的方式

本帖子中包含更多资源

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

x
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部