求教:winform自动打印的优化

璀璨LT 2016-08-16 09:30:13
现在的方法是在窗体的线程上执行委托,但自动打印一段时间后程序直接卡死,请大家帮忙看下问题出在哪,或者怎么优化:
///在拥有此控件的基础窗口句柄的线程上执行指定的委托。
private void PointDelegate()
{
this.Invoke(new PointInvokeDelegate(AutoPoint));
}
private void AutoPoint()
{
var loResult = moDao.GetNeedPointStu(); //获取待打印的学生名单
foreach(var stu in loResult)
{
//执行打印
PrintReport(stu.IDCARDNO, DateTime.Now.ToString("yyyy-MM-dd"));
Thread.Sleep(10000);
return;
}
}
private void PrintReport(string vsIDCardNo, string vsTestDate)
{
this.PrintDocAssign.PrintController = new StandardPrintController();
msIDCardNo = vsIDCardNo;
msTestDate = vsTestDate;

this.PrintDocAssign.PrintPage += PrintDocAssign_PrintPage;
foreach (System.Drawing.Printing.PaperSize ps in PrintDocAssign.PrinterSettings.PaperSizes)
{
if (ps.PaperName == "A4")
{
PrintDocAssign.PrinterSettings.DefaultPageSettings.PaperSize = ps;
PrintDocAssign.DefaultPageSettings.PaperSize = ps;
}
}
mbIfAutoPrint = true;
this.PrintDocAssign.Print(); //开始打印进程
moDao.SetPointZT(msIDCardNo, msTestDate);
}
}
...全文
286 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
董事长Kevin 2018-01-05
  • 打赏
  • 举报
回复
领导说了加个Thread.Sleep(10000) ,让用户花钱来优化。
璀璨LT 2016-08-16
  • 打赏
  • 举报
回复
引用 3 楼 D56233577 的回复:
你在UI线程上执行Thread.Sleep(10000)?你还来问为什么卡?
额,之前连续发送打印指令会把打印机卡死,用户不会也懒的学怎么处理,有没有什么更好的办法?
D56233577 2016-08-16
  • 打赏
  • 举报
回复
你在UI线程上执行Thread.Sleep(10000)?你还来问为什么卡?
璀璨LT 2016-08-16
  • 打赏
  • 举报
回复
引用 1 楼 zhi_ai_yaya 的回复:
private void AutoPoint() { var loResult = moDao.GetNeedPointStu(); //获取待打印的学生名单 foreach(var stu in loResult) { //执行打印 PrintReport(stu.IDCARDNO, DateTime.Now.ToString("yyyy-MM-dd")); Thread.Sleep(10000); return; } } 这个foreach、睡眠10秒和return,你确定是循环而又只打印一次? 如果是等待打印完毕,可以捕捉打印完毕事件,然后开始下一次打印,或者使用打印队列。
return确实错了,再试着按你的建议优化下,谢谢了~
我叫小菜菜 2016-08-16
  • 打赏
  • 举报
回复
private void AutoPoint() { var loResult = moDao.GetNeedPointStu(); //获取待打印的学生名单 foreach(var stu in loResult) { //执行打印 PrintReport(stu.IDCARDNO, DateTime.Now.ToString("yyyy-MM-dd")); Thread.Sleep(10000); return; } } 这个foreach、睡眠10秒和return,你确定是循环而又只打印一次? 如果是等待打印完毕,可以捕捉打印完毕事件,然后开始下一次打印,或者使用打印队列。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧