ExportToHttpResponse失败{无法评估表达式,因为代码已优化或本机框架位于调用堆栈之上}

时间:2013-06-11 04:24:46

标签: c# exception crystal-reports

首先,我是C#编程的新手,我正面临无法评估表达式,因为代码已优化或本机框架位于调用堆栈之上我项目中的消息以PDF格式生成水晶报告我在谷歌搜索了答案,还看到了许多链接,包括this但没有任何帮助我可以告诉我什么是错误

我尝试的代码是,

  protected void getpkeybt_Click(object sender, EventArgs e)
{
    bool ch = checkFromToDate();
    int i=checkTxt();
    if ( ch == true && i==1)
    {
        try
        {
            Response.Buffer = false;
            Response.ClearContent();
            Response.ClearHeaders();
            ReportDocument rpt = new ReportDocument();
            DateTime dt = DateTime.Parse(frmtxtdt.Text);
            DateTime dt1 = DateTime.Parse(frmtxtdt.Text);
            string frtxt = String.Format("{0:MM-dd-yyyy}", dt);
            string totxt = String.Format("{0:MM-dd-yyyy}", dt1);
            DataSet ds = Namespace.SP.EStoredprocedure(frtxt,totxt).GetDataSet();
            if (!IsPageRefresh)
           {
            if (ds.Tables[0].Rows.Count > 0
                && frtxt == ds.Tables[0].Rows[0]["Date"].ToString()
                && totxt == ds.Tables[0].Rows[0]["Date"].ToString())
            {
                ds.Tables[0].TableName = "Passkeys";

                ds.WriteXml(Server.MapPath("~/XML/Passkeys.xml"));
                string filename = Server.MapPath("~/Upload/Pkey_rpt.rpt");
                rpt.Load(filename);
                rpt.SetDataSource(ds);
                rpt.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, "Passkeys");

            }
            else if(frmtxtdt.Text.Trim() !=null && totxtdt.Text.Trim()!=null)
            {
                if (frtxt   == ds.Tables[0].Rows[0]["Date"].ToString()
                     && totxt == ds.Tables[0].Rows[0]["Date"].ToString() 
                     && ds.Tables[0].Rows.Count == 0)
                {

                    lblmsg.Text = "Pass Key(s) Not Yet Delivered for the Selected Date...";

                }
                else
                {

                    lblmsg.Text = "There is No Schedule for the Selected date....";
                }

            }
         }

        }
        catch (Exception ex)
        {
            lblmsg.Text = ex.Message;
        }
    }

}

1 个答案:

答案 0 :(得分:0)

您的问题是ExportToHttpResponse()正在调用Response.End(),它以最快的方式结束响应:通过中止线程。这会导致ThreadAbortException正在处理的try/catch。但是,线程中止异常的问题是默认情况下它们会在catch块的末尾自动重新抛出。这对你来说是个问题,因为你实际上并不希望这个线程被杀死(我猜它是你的UI线程。)因此,你需要在你的Thread.ResetAbort()块中调用catch,这指示运行时停止重新抛出异常。

请注意,这通常是推荐(不会从天空中止线程,或者在发生线程时停止中止。)但是,这是{{1}的已知“特征”而且,一般来说,特别是Response.End(),所以在你的情况下,我认为这是合理的。