【发布时间】:2015-10-06 20:04:13
【问题描述】:
我正在编写批处理打印机,但它在打印过程中随机崩溃,说“XXX已停止工作”,仅此而已。如何跟踪崩溃并获取更多信息?
我添加了try 和catch,但它永远不会抓住括号。
代码:
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;
}
}
}
【问题讨论】:
-
在调试器下运行时会出现这种情况吗?是否将其设置为在抛出异常时停止?
-
你有没有逐步缩小它发生的范围?
-
谢谢,我会尝试启用“抛出异常时中断”@RowlandShaw
-
单步执行时没有任何问题...@DonBoitnott
-
.NET 的目标版本是什么?对于 .NET 4+,CLR 不允许进程处理 corrupted state exceptions。这可能是非托管代码引发的异常:在您的项目属性中启用非托管代码调试。此外,如果您包含
HighlightPrintedRow的代码,您可以帮助我们帮助您。