求教: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);
}
}
...全文
341 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,你确定是循环而又只打印一次? 如果是等待打印完毕,可以捕捉打印完毕事件,然后开始下一次打印,或者使用打印队列。
代码下载地址: https://pan.quark.cn/s/0ba44e4274fa 本文首先阐述了关键帧提取技术的研究背景及其重要意义,并概述了国内外相关领域的研究进展,随后对当前较为广泛应用的若干关键帧提取方法进行了深入说明和细致剖析,同时对每一种方法都进行了相应的实验验证。 在常见的关键帧提取算法中,包括基于镜头边界识别的技术、基于图像内容分析的技术、基于聚类分析的技术、基于运动特征分析的技术以及基于压缩视频流处理的技术。 上述这些方法均具备各自的优缺点和一定的应用限制,通常只适用于特定的视频类型,缺乏普遍的适用性。 针对前述关键帧提取方法所存在的不足之处,本文提出了一种创新的关键帧提取方案,该方法依据图像信息熵和边缘匹配率来选取关键帧。 具体步骤如下:首先计算每帧图像的信息熵,并选取信息熵呈现局部极值时所对应的帧作为候选关键帧;接着运用特定算子提取候选关键帧的边缘特征,并对相邻帧进行边缘匹配;若相邻帧的边缘匹配率大于等于预设阈值,则判定当前帧为冗余关键帧,予以剔除。 该方案无需预先设定阈值参数,能够根据视频内容的实际特征动态确定关键帧的数量,展现出优异的适应性。 通过对各类视频进行测试,实验结果证实提取出的关键帧能够有效代表对应视频的主要内容,为视频检索和视频检测任务奠定了坚实的基础。

111,130

社区成员

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

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

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