try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());
}
catch( Exception ex )
{
string msg = ex.Message + "[" + ex.InnerException.Message + "]";
MessageBox.Show(msg);
}已经这样写了,为什么程序崩溃时还是没有捕捉到异常???
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());
}
catch( Exception ex )
{
string msg = ex.Message + "[" + ex.InnerException.Message + "]";
MessageBox.Show(msg);
}
catch()
{
MessageBox.Show("出错了!!!");
}
就是说如果下面的代码中,MsgResolve函数(一个DLL中导出的)发生异常,虽然在try-catch里面,程序也无法捕获是么? try
{
int ret = MsgResolve(rawDataBuffer, out realtimeErrorT);
}
catch (Exception ex)
{
Common.Log.WriteLog(ex);
rawDataBuffer = null;
}
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());
}
catch( Exception ex )
{
string msg = ex.Message + "[" + ex.InnerException.Message + "]";
MessageBox.Show(msg);
}
catch // <----------------------------------- 这里不要括号
{
MessageBox.Show("出现了前面没有捕获的错误!!!");
}
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());
}
catch
{
string msg= ex.Message+"["+ ex.InnerException.Message+"]";
MessageBox.Show(msg);
}
如果出现 catch(Exception ex){} 无法捕获而可以由无参的 catch{} 捕获的错误,多半不是由于 .NET 托管程序的原因引起的。
对不起,catch 后面多写了(),见 10 楼。
不过比较奇怪的是,弹出崩溃的对话框后,程序还能运行一段时间。 UI还在更新,数据库也还在写。。简单说,我这程序是socket异步接收后,触发一个事件,在事件处理函数中调用一个DLL函数解析这条消息,之后再从线程池中取一个线程将解析后的消息插入数据库。麻烦各位帮忙分析一下,有哪些可能的原因??
多谢!
{
string msg = ex.Message + "[" + ex.Message + "]";
MessageBox.Show(msg);
}
Main() 中的 try catch 无法捕捉 form 中新开线程 throw 的异常static void Main()
{
try {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
catch {
MessageBox.Show("程序捕捉到未知错误");
}
}public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
(new Thread(delegate()
{
throw new Exception();
})).Start();
}
}
需要做一些异步工作而不阻塞UI的任务,推荐使用BackgroundWorker
{
(new Thread(delegate()
{
try {
this.Invoke((Action)delegate { this.Button1.Enable = false; });
throw new Exception();
}
catch {
}
})).Start();
}
群号:62464919,本群是IT技术群,包括(C#,Java,ruby,JavaScript,asp,jsp,python,asp.net,sql,mysql……众多语言)此群需要您来共同进步,学习中放松心情。管理员在次致敬,呵呵,搞的不好了。
onpaint 这个函数如果出现这个问题。昨天有个类似的问题。程序单步执行没问题。也不会报错。我也在函数中调用非托管代码。
查了一天时间才发现是这个问题。
但不知道是什么原因。