在Winform中跟踪崩溃

问题描述:

我正在编程一个批处理打印机,但它在打印过程中随机崩溃,并说“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

尝试看看系统的事件查看器。通常情况下,如果你的.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

试试这个Switching to Managed Compatibility Mode in Visual Studio 2013

有时VS重新启动或重新启动帮助。