首先,我是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;
}
}
}
答案 0 :(得分:0)
您的问题是ExportToHttpResponse()
正在调用Response.End()
,它以最快的方式结束响应:通过中止线程。这会导致ThreadAbortException
正在处理的try/catch
。但是,线程中止异常的问题是默认情况下它们会在catch
块的末尾自动重新抛出。这对你来说是个问题,因为你实际上并不希望这个线程被杀死(我猜它是你的UI线程。)因此,你需要在你的Thread.ResetAbort()
块中调用catch
,这指示运行时停止重新抛出异常。
请注意,这通常是不推荐(不会从天空中止线程,或者在发生线程时停止中止。)但是,这是{{1}的已知“特征”而且,一般来说,特别是Response.End()
,所以在你的情况下,我认为这是合理的。