iT邦幫忙

0

批次列印無預警關閉

  • 分享至 

  • xImage

目前有支 winform 批次,.net framwork 4.5.2,執行在 win7 上,上班電腦開機後自動執行,每5秒撈一次資料,有資料即印單,此作法為廠商初期開發導入模式,一直以來,可能偶爾會自行關閉(一般可能上午尖峰時段當掉的次數較多,下午量少又正常),使用者發現過久沒印單後,就會去檢查,自行重啟,但近來大概次數太頻繁或受不了,叫我們要想辦法改善,因為是無預警關閉,連想知道吐什麼錯都不行,只能看事件檢視器,不過,看了也沒什麼頭緒,不曉得有沒有前輩可以指點一下,萬分感激

報表是用 componentone

事件檢視器內容:
應用程式: BatchPrintPrj.exe Framework 版本: v4.0.30319 描述: 處理序已終止,因為有未處理的例外狀況。例外狀況資訊: System.AccessViolationException
於 System.Drawing.SafeNativeMethods.EndPage(System.Runtime.InteropServices.HandleRef)
於 System.Drawing.Printing.StandardPrintController.OnEndPage(System.Drawing.Printing.PrintDocument, System.Drawing.Printing.PrintPageEventArgs)
於 System.Drawing.Printing.PrintController.PrintLoop(System.Drawing.Printing.PrintDocument)
於 System.Drawing.Printing.PrintController.Print(System.Drawing.Printing.PrintDocument)
於 System.Drawing.Printing.PrintDocument.Print()
於 SP.ReportTemplate.SPReportObject.Print(System.Object)
於 SP.Report.BatchPrj.SPBatchReport.Print()
於 BatchPrintPrj.PrintForm.PrintForm_SPJobQueue(System.Object, SP.FormTemplate.SPJobQueueEventArgs)
於 SP.FormTemplate.SPPrintForm+<>c__DisplayClass20_1.<SPPrintForm_SPTimerProcess>b__1()
於 SP.FormTemplate.SPPrintForm+<>c__DisplayClass20_0.<SPPrintForm_SPTimerProcess>b__0()
於 SP.FormTemplate.SPPrintForm.SPPrintForm_SPTimerProcess(System.Object, SP.FormTemplate.SPTimerProcessEventArgs)
於 SP.FormTemplate.SPTimerProcessForm+<>c__DisplayClass67_0.<ProcessTimer_Tick>b__1()
於 SP.FormTemplate.SPTimerProcessForm.ProcessTimer_Tick(System.Object, System.EventArgs)
於 System.Windows.Forms.Timer.OnTick(System.EventArgs)
於 System.Windows.Forms.Timer+TimerNativeWindow.WndProc(System.Windows.Forms.Message ByRef)
於 System.Windows.Forms.NativeWindow.Callback(IntPtr, Int32, IntPtr, IntPtr)
於 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG ByRef)
於 System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr, Int32, Int32)
於 System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext)
於 System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext)
於 System.Windows.Forms.Application.Run(System.Windows.Forms.Form) 於 BatchPrintPrj.Program.Main()

froce iT邦大師 1 級 ‧ 2022-10-12 10:09:26 檢舉
看起來是廠商沒對某些特殊狀況如取不到資料,或資料超出原本預設範圍作例外處理。
這需要廠商從原碼做修改對症下藥。請聯絡你的廠商。
holton iT邦新手 4 級 ‧ 2022-10-14 10:00:56 檢舉
殘念,早過保固了,現在自行維護
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
Coding小僧
iT邦新手 3 級 ‧ 2022-10-12 10:09:06
最佳解答
holton iT邦新手 4 級 ‧ 2022-10-14 10:00:21 檢舉

這方法有效,不會整個關掉, 目前攔截到錯誤如下
通常某筆資料出錯,再下個循還又可以了 ..... =.=
這樣我還真不知道該怎麼下手

System.AccessViolationException: 嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。
於 System.Drawing.SafeNativeMethods.EndPage(HandleRef hDC)
於 System.Drawing.Printing.StandardPrintController.OnEndPage(PrintDocument document, PrintPageEventArgs e)
於 System.Drawing.Printing.PrintController.PrintLoop(PrintDocument document)
於 System.Drawing.Printing.PrintController.Print(PrintDocument document)
於 System.Drawing.Printing.PrintDocument.Print()
於 SP.ReportTemplate.SPReportObject.Print(Object AReport)
於 SP.Report.BatchPrj.SPBatchP011Report.Print()
於 BatchP010Prj.BatchP010Form.BatchP010Form_SPJobQueue(Object sender, SPJobQueueEventArgs e)

感覺記憶體本身就有問題...

我要發表回答

立即登入回答