目前有支 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()
這方法有效,不會整個關掉, 目前攔截到錯誤如下
通常某筆資料出錯,再下個循還又可以了 ..... =.=
這樣我還真不知道該怎麼下手
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)
感覺記憶體本身就有問題...