2015-10-06 108 views
0

我正在編程一個批處理打印機,但它在打印過程中隨機崩潰,並說「XXX已停止工作」,無非就是如此。我如何跟蹤崩潰並獲取更多信息?在Winform中跟蹤崩潰

我加入trycatch,但它永遠不會趕上支架。

代碼:

private void btnPrint_Click(object sender, EventArgs e) 
    { 
     if (parts == null) 
     { 
      return; 
     } 
     ultraGrid1.PerformAction(Infragistics.Win.UltraWinGrid.UltraGridAction.ExitEditMode); 
     foreach (Part part in parts) 
     { 
      if (part.Selected) 
      { 
       switch (part.FileType) 
       { 
        case "PDF": 
         //SendToPDFReaderPrinter(part); 
         break; 
        case "SLDDRW": 
         if (!useSolidworksToPrint) 
         { 
          SendToeDrawingsPrinter(part); 
         } 
         else 
         { 
          //SendToSolidworksPrinter(part); 
         } 
         break; 
       } 
      } 
     } 
     MessageBox.Show("Print Complete."); 
    } 

    private void SendToeDrawingsPrinter(Part part) 
    { 
     try 
     { 
      string filePath = part.FilePath; 
      //Show Preview 
      axAcroPDF1.Hide(); 
      eDrawingControl1.Show(); 
      //Load file 
      eDrawingControl1.eDrawingControlWrapper.OpenDoc(filePath, false, false, false, ""); 
      //Config 
      eDrawingControl1.eDrawingControlWrapper.SetPageSetupOptions(EModelView.EMVPrintOrientation.eLandscape, 1, 0, 0, 1, 7, printerName, 1, 1, 1, 1); 
      //Print 
      Wait(2); //Wait for 2 seconds 
      eDrawingControl1.eDrawingControlWrapper.Print4(false, filePath, false, false, true, EModelView.EMVPrintType.eScaleToFit, 1, 0, 0, true, 1, 1); 
      Wait(2); //Wait for 2 seconds 
      //eDrawingControl1.eDrawingControlWrapper.CloseActiveDoc(""); 
      //Hightligh Printed Row 
      HighlightPrintedRow(part, true); 
     } 
     catch 
     { 
      HighlightPrintedRow(part, false); 
     } 
    } 

    //Wait 
    private void Wait(double seconds) 
    { 
     DateTime start = DateTime.Now; 
     while (start.AddSeconds(seconds) >= DateTime.Now) 
     { 
      System.Windows.Forms.Application.DoEvents(); 
     } 
    } 

    private void HighlightPrintedRow(Part part, bool isSuccessful) 
    { 
     foreach (var row in ultraGrid1.Rows) 
     { 
      if ((Part)row.ListObject == part) 
      { 
       row.Appearance.BackColor = (isSuccessful ? Color.LightGreen : Color.Red); 
       break; 
      } 
     } 
    } 
+1

在調試器下運行時會發生這種情況嗎?你是否將它設置爲在拋出異常時停止? –

+1

你是否已經逐步縮小了它發生的路線? – DonBoitnott

+0

謝謝,我會努力使「打破時拋出異常」時邁通... @ DonBoitnott – Brian

回答

1

嘗試看看系統的事件查看器。通常情況下,如果你的.NET應用程序出現「xxx停止工作」,你會發現一些東西。

或者,您可以使用低級錯誤跟蹤組件從.NET運行時捕獲所有異常。請參閱BugTrap

+0

錯誤應用程序名稱:bruno_batchprint.vshost.exe,版本:12.0.21005.1,時間戳:0x524fac12 錯誤模塊名稱: EModelView.dll,版本:15.0.0.5013,時間戳:0x5429b603 異常代碼:0000005 故障偏移:0x00000000000a9c68 出錯進程ID:0x2b84 錯誤的應用程序啓動時間:0x01d1007ba16d0b38 錯誤的應用程序路徑:d:\項目\ brumo_batch_print_excel \ bruno_batchprint \ Bin \ Debug \ bruno_batchprint.vshost.exe 錯誤模塊路徑:C:\ Program Files \ SOLIDWORKS Corp \ eDrawings X64 Edition \ EModelView.dll 報告編號:f2556ebe-6c70-11e5-b85d-c0389642987a – Brian

+0

我想這個意味着錯誤發生在「EModelView.dll」中?我怎麼知道它是由dll的內部錯誤引起的還是因爲我以不正確的方式使用它? – Brian

+0

是的,這是該組件的錯。您可能需要詢問該組件的支持團隊。或者你仍然可以嘗試使用BugTrap,看看它是否可以告訴你更多的細節。 – xtu

相關問題