AR多线程中打印/预览账票
使用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
请帮分析原因,提供解决思路,感谢。
现象2错误提示 您的意思是,报表R1在后台打印中,加载报表R2???
不是,R1先打印,打印完后,预览显示R2 (ShowDialog) 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
)
您把第三个参数修改下,看看效果
Lenka.Guo 发表于 2016-12-27 18:09
打印的方法和报表显示的具体代码是什么?
我觉得看AR 提供Document.Print 方法,
感谢提供方法,使用Case3,并把Print第三个参数改为true后,R1卡死现象没出现了,但出现R2卡死现象,账票预览显示了,但点击账票上按钮无反应,无法关闭/打印张票。 打印账票的方法:
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; 用STA线程方式,显示普通窗体是没问题的,窗体里加载账票就出现现象2提示 那您试着在预览代码后添加报表对象释放,是否能解决问题?,如果实在不行,您把能够重新问题的Demo上传下,我在这边调试并寻找解决方法
rpt.Document.Dispose();
rpt.Dispose();
rpt=null;
demo是现象2的方式
页:
[1]
2