找回密码
 立即注册

QQ登录

只需一步,快速开始

[已处理] Spread打印问题。

Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-2-2 16:58:45
6#
本帖最后由 Richard.Ma 于 2021-2-3 11:48 编辑

你好,在调用打印方法之前,调用这个代码可以完全解决“从不是创建控件的线程访问它”的问题

  1. Control.CheckForIllegalCrossThreadCalls = false;
复制代码


image.png56889647.png

另一个办法的话,还是我之前帖子中给你提到的,通过委托来打印
  1.             for (int i = 1; i <= 8; i++)
  2.             {
  3.                 while (Suspend == true)
  4.                 {
  5.                 }
  6.                 if (Stop == true)
  7.                     break;
  8.                 fpSpread1.CreateControl();
  9.                 fpSpread1.Invoke(new Action(() => {
  10.                     fpSpread1.PrintSheet(1, false);
  11.                 }));
  12.             }
复制代码





回复 使用道具 举报
bingdaoice
中级会员   /  发表于:2021-2-2 14:41:13
5#
你好,请问测试有结果了吗?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-2-1 17:55:48
地板
收到,我再测试一下 重新给你发一个demo过去
回复 使用道具 举报
bingdaoice
中级会员   /  发表于:2021-2-1 15:41:31
板凳
本帖最后由 bingdaoice 于 2021-2-1 15:47 编辑
Richard.Ma 发表于 2021-2-1 15:33
可以按照此附件运行测试

版主你好。你的这个代码与我实际使用方式是不一样的。你的代码是将同一份文件打印100次。而我是需要加载100份不同的文件,打印100次。(只不过是论坛上传要求限制20M,所以才用同一个文件循环加载来进行打印测试。)
这两个要求是不一样的。

for (int i = 1; i <= 100; i++)
            {
                while (Suspend == true)
                {
                }
                if (Stop == true)
                    break;
                fpSpread1.PrintSheet(1, false);
            }

而且在我这边测使使用你上面的DEMO,打印第三次时也报“System.InvalidOperationException”类型的未经处理的异常在 System.Windows.Forms.dll 中发生
其他信息: 线程间操作无效: 从不是创建控件“”的线程访问它。你可以多点几次打印试试,应该也会报错的。
image.png488262328.png



回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-2-1 15:33:31
沙发
可以按照此附件运行测试

spreadprint.zip

17.67 MB, 下载次数: 550

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