“从不是创建控件的线程访问他”,这个错误和Spread没有关系,一般来说是另一个线程修改界面控件时提示,这个应该是你第一种情况发生的错误。两次点击开始,又重新创建了一个线程
如果你点击开始是为了重新开始另一次循环打印的话,那取消打印时就应该关掉之前的线程,
第二种情况我这边也测试出了另一个错误,这个是由于打开文件时文件被另一个Spread对象占用。因此我昨天回复你建议是在单独的一个Spread对象来循环打印
下面是我给你修改了OpenSpreadNew方法,循环放在里面执行,新建线程直接调用这个方法,开始打印和取消打印,你得再加逻辑来控制,不要多次点击开始创建多个线程- public void OpenSpreadNew()
- {
- string JobName = "";
- FarPoint.Win.Spread.FpSpread fpSpread1 = new FarPoint.Win.Spread.FpSpread();
- fpSpread1.Open(AppDomain.CurrentDomain.BaseDirectory + "1.xml");
- string PrinterName = "检定证书";
- if (fpSpread1.GetPrintPageCount(1) > 2)
- PrinterName = PrinterName + "多页";
- fpSpread1.Sheets[1].PrintInfo.ShowBorder = false;//是否要打印在整个控件周围的外框边界。
- fpSpread1.Sheets[1].PrintInfo.ShowGrid = false;//该值指示是否打印网格线
- fpSpread1.Sheets[1].PrintInfo.ShowRowHeaders = false;//获取或设置是否打印行头
- fpSpread1.Sheets[1].PrintInfo.ShowColumnHeaders = false;//获取或设置是否打印列头
- fpSpread1.Sheets[1].PrintInfo.Centering = FarPoint.Win.Spread.Centering.Horizontal;//该值指示打印输出时的居中显示方式
- fpSpread1.Sheets[1].PrintInfo.ShowPrintDialog = false;//是否显示打印机选择窗口
- fpSpread1.Sheets[1].PrintInfo.ShowColor = false;
- fpSpread1.Sheets[1].PrintInfo.Preview = false;//是否预览
- fpSpread1.Sheets[1].PrintInfo.JobName = JobName;
- fpSpread1.Sheets[1].PrintInfo.Printer = PrinterName;
-
- for (int i = 1; i <= 100; i++)
- {
- while (Suspend == true)
- {
- }
- if (Stop == true)
- break;
- fpSpread1.PrintSheet(1, false);
-
-
- }
-
- }
复制代码
|
|