找回密码
 立即注册

QQ登录

只需一步,快速开始

bingdaoice

中级会员

44

主题

208

帖子

608

积分

中级会员

积分
608
bingdaoice
中级会员   /  发表于:2020-9-18 14:36  /   查看:13506  /  回复:22
1金币
在线程中调用包含Spread的Form并打印时提示程序处理中断模式,并且程序无法继续运行。(附件有DEMO可重现此问题)
调用代码如下:
FormCertifPrintBatchBack1 frmCertifPrintBatchBack1 = new FormCertifPrintBatchBack1();
            System.Threading.Thread t1 = new System.Threading.Thread(frmCertifPrintBatchBack1.ThreadMethod);

            t1.SetApartmentState(System.Threading.ApartmentState.STA);
            t1.Start();

        public void ThreadMethod()
        {
            OpenSpread();
        }

        private void OpenSpread()
        {
            Form1 frmRecdCertif = new Form1();
            frmRecdCertif.fpSpread1.Open(AppDomain.CurrentDomain.BaseDirectory + "1.xml");

            string PrinterName = "单据打页机";
            if (frmRecdCertif.fpSpread1.GetPrintPageCount(1) > 2)
                PrinterName = PrinterName + "多页";

            frmRecdCertif.fpSpread1.Sheets[1].PrintInfo.ShowBorder = false;//是否要打印在整个控件周围的外框边界。
            frmRecdCertif.fpSpread1.Sheets[1].PrintInfo.ShowGrid = false;//该值指示是否打印网格线
            frmRecdCertif.fpSpread1.Sheets[1].PrintInfo.ShowRowHeaders = false;//获取或设置是否打印行头
            frmRecdCertif.fpSpread1.Sheets[1].PrintInfo.ShowColumnHeaders = false;//获取或设置是否打印列头
            frmRecdCertif.fpSpread1.Sheets[1].PrintInfo.Centering = FarPoint.Win.Spread.Centering.Horizontal;//该值指示打印输出时的居中显示方式
            frmRecdCertif.fpSpread1.Sheets[1].PrintInfo.ShowPrintDialog = false;//是否显示打印机选择窗口
            frmRecdCertif.fpSpread1.Sheets[1].PrintInfo.ShowColor = false;
            frmRecdCertif.fpSpread1.Sheets[1].PrintInfo.Preview = false;//是否预览
            frmRecdCertif.fpSpread1.PrintSheet(frmRecdCertif.fpSpread1.Sheets[1]);
            frmRecdCertif.Close();
        }



image.png605244750.png

spread_win_中断模式.rar

14.42 MB, 下载次数: 1452

22 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-9-18 17:13:47
沙发
问题已经重现,测试了一下如果是直接预览再打印的话可以正常打印

目前看起来问题是由于System.Drawing引起的,看来是存在一些兼容性问题,
这个我还需要验证一下是这个特定文件的问题,还是控件本身的问题
回复 使用道具 举报
bingdaoice
中级会员   /  发表于:2020-9-23 10:22:51
板凳
请问打印问题,有解决办法了吗?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-9-23 12:03:33
地板
本帖最后由 Richard.Ma 于 2020-10-9 11:22 编辑

您好,此问题目前已经验证是控件本身的问题,这个在其他的xml模板中也能重现。暂时没有其他的办法,建议先预览打印

此贴保留处理,问题已经作为issue发给研发。ID:   SPNET-12924
回复 使用道具 举报
bingdaoice
中级会员   /  发表于:2020-9-23 14:05:23
5#
好的。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-9-23 15:40:30
6#
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-1-21 17:28:55
7#
你好,当前14版本此问题已经修复,欢迎下载新版测试体验                                                                                                                                                                          
回复 使用道具 举报
bingdaoice
中级会员   /  发表于:2021-1-26 09:23:45
8#
Richard.Ma 发表于 2021-1-21 17:28
你好,当前14版本此问题已经修复,欢迎下载新版测试体验                                                 ...

您好版主。我使用14版本进行打印测试,还是使用此前的demo,但是将里面的引用及licenses都重新替换及生成了。 image.png783407287.png
但问题还是依旧报“System.ArgumentException”类型的未经处理的异常在 System.Drawing.dll 中发生

不知道需要修改哪里。谢谢!
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-1-26 11:02:27
9#
本帖最后由 Richard.Ma 于 2021-1-26 11:59 编辑

不好意思,已经确认此问题实际上并不是控件bug,错误原因在于打印尚未完成时,窗体连同里面的控件已经关闭,导致错误 image.png664309997.png

修改这个地方的代码为
  1.             frmRecdCertif.fpSpread1.Sheets[1].PrintInfo.ShowBorder = false;//是否要打印在整个控件周围的外框边界。
  2.             frmRecdCertif.fpSpread1.Sheets[1].PrintInfo.ShowGrid = false;//该值指示是否打印网格线
  3.             frmRecdCertif.fpSpread1.Sheets[1].PrintInfo.ShowRowHeaders = false;//获取或设置是否打印行头
  4.             frmRecdCertif.fpSpread1.Sheets[1].PrintInfo.ShowColumnHeaders = false;//获取或设置是否打印列头
  5.             frmRecdCertif.fpSpread1.Sheets[1].PrintInfo.Centering = FarPoint.Win.Spread.Centering.Horizontal;//该值指示打印输出时的居中显示方式
  6.             frmRecdCertif.fpSpread1.Sheets[1].PrintInfo.ShowPrintDialog = false;//是否显示打印机选择窗口
  7.             frmRecdCertif.fpSpread1.Sheets[1].PrintInfo.ShowColor = false;
  8.             frmRecdCertif.fpSpread1.Sheets[1].PrintInfo.Preview = false;//是否预览

  9.             frmRecdCertif.CreateHandleInternal();
  10.             frmRecdCertif.fpSpread1.CreateControl();
  11.             frmRecdCertif.fpSpread1.Invoke(new Action(() =>
  12.             {
  13.                 frmRecdCertif.fpSpread1.PrintSheet(1,false);
  14.             }));
  15.             frmRecdCertif.Close();
复制代码


在打印完成后再关闭窗体,即可解决问题

回复 使用道具 举报
bingdaoice
中级会员   /  发表于:2021-1-26 14:15:03
10#
Richard.Ma 发表于 2021-1-26 11:02
不好意思,已经确认此问题实际上并不是控件bug,错误原因在于打印尚未完成时,窗体连同里面的控件已经关闭 ...

您好版主。我这里引用不了frmRecdCertif.CreateHandleInternal(),不知道是哪里有问题了。谢谢!
image.png821414489.png
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部