捕捉从一个表单传递到另一个表单的堆栈跟踪
本文关键字:表单 跟踪 堆栈 另一个 一个 | 更新日期: 2023-09-27 17:50:05
我遇到大麻烦了。我试着找了半天,这就是我的问题。我创建一个应用程序使用c#和。net v4.0(客户概要文件版本)生成pdf报告异常相信时,我想做的就是我想堆栈跟踪报告当一个错误发生时,我知道如何得到堆栈跟踪,当一个错误发生,但是我需要知道我怎么能将它传递到另一个窗口的形式显示堆栈跟踪,给用户一个机会回顾它在发送之前我怎么能通过我的堆栈跟踪请帮另一种形式提前感谢!
下面是我用来获取异常堆栈跟踪的代码
try
{
StreamReader sr = new StreamReader(@"C:'Users'niyo'Documents'TESTs'hfkdjhfkhd.text");
}
catch (Exception ex)
{
string trace = ex.StackTrace;
MessageBox.Show("Test");
frmProto frm = new frmProto();
frm.Show();
this.Hide();
}
on Form1:
try
{
StreamReader sr = new StreamReader(@"C:'Users'niyo'Documents'TESTs'hfkdjhfkhd.text");
}
catch (Exception ex)
{
string trace = ex.StackTrace;
MessageBox.Show("Test");
frmProto frm = new frmProto();
frm.trace=trace;
frm.Show();
this.Hide();
}
on Form2:
public static string trace;
MessageBox.Show(trace);
try this:
public static Exception formException;
try
{
StreamReader sr = new StreamReader(@"C:'Users'niyo'Documents'TESTs'hfkdjhfkhd.text");
}
catch (Exception ex)
{
formException = ex;
MessageBox.Show("Test");
frmProto frm = new frmProto();
frm.Show();
this.Hide();
}
在你的新表单上使用:
Exception = Form1.formException;解析整个Exception对象,因为它包含错误消息。有时错误消息比堆栈跟踪更有帮助,因为错误消息非常清楚。
也有很多时候是Exception对象的InnerException更有帮助。
祝你好运!
完整示例i did:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public static Exception formException;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
int.Parse("This will raise and excpetion because i can't convert this to an int... ");
}
catch (Exception ex)
{
formException = ex;
Form2 frm = new Form2();
this.Hide();
}
}
}
}
在第二张表格上:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
MessageBox.Show(Form1.formException.Message);
}
}
}