错误:由于代码已经优化,无法评估表达式

12

我的asp.net应用程序出现了错误,错误信息如下:

"由于代码已经优化或本机框架在调用堆栈的顶部,因此无法评估表达式。"

protected void btnCustomerProfile_Click(object sender, EventArgs e)
{
    try
    {
        Server.Transfer("CustomerProfile.aspx");
    }
    catch (Exception ex)
    {
        Response.Write(ex.ToString());
    }
    finally
    { }
}

在搜索SO之后,我发现大多数类似的帖子都涉及到response.redirect。我的代码正在使用server.transfer,并且我的应用程序还使用了Master Pages。

我该如何解决这个问题?

更新:出于某种原因,如果我使用Response.Redirect也会出现此错误。不幸的是,我不能使用Server.Execute,因为Server.Execute会在最后调用调用页面。


你能发布一下抛出异常的代码段吗? - davioooh
嗯...在我的情况下,问题是由Response.End引起的...但是看你的代码很难说这个问题的原因是什么... - davioooh
4个回答

13
你会收到一个错误,但下面的代码块将捕获它,这样你就可以继续你的生活了。
尝试这个:
using System.Threading.ThreadAbortException;

catch(ThreadAbortException ex)
{
    throw;
}

10

您提供的链接信息显示为 .net 1.0 和 1.1 框架。而我正在使用 4.0 框架。我认为这个问题应该在8年后得到解决。 - DNR
8
微软不会解决它的问题,只会将它们标记为“已知问题”…… :) - davioooh
server.execute的问题在于它会返回到调用页面。由于我目前有使用server.transfer的代码,所以我想看看能否继续采用相同的编码策略。http://techahead.wordpress.com/2007/10/14/aspnet-servertransfer-vs-serverexecute/ - DNR
生成的异常是否是ThreadAbortException?另外,如果有内部异常消息,值得将异常写入日志文件,以确保调试器未格式化消息。 - AvengingBudda

2

当我使用MS-Test测试多线程应用程序的工作时,遇到了这个消息。

我发现原因是因为测试主线程已经结束并且初始化清理对象,而其他创建的线程仍在无限运行。

由于清理方法会销毁对象,这些线程会被中止并显示上述消息。


2

该应用程序目前有使用 server.transfer 的代码(由一位已离职的开发人员完成),因此我需要保持与当前架构的一致性。 - DNR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接