0

まず第一に、私は C# プログラミングの初心者です。コードが最適化されているか、ネイティブ フレームがコール スタックの一番上にあるため、式を評価できません検索した PDF 形式で Crystal レポートを生成すると、プロジェクトでメッセージが表示されます。 Answers in Google で、これを含む多くのリンクも見ましたが、何の助けにもなりませんでした

私が試したコードは、

  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;
        }
    }

}
4

1 に答える 1

0

あなたの問題は、それExportToHttpResponse()が呼び出していることですResponse.End()。これは、それが知っている最も速い方法で応答を終了します:スレッドを中止することによって。それはThreadAbortExceptionあなたtry/catchが扱っている を泡立てます。catchただし、スレッド アボート例外の問題は、ブロックの最後でデフォルトで自動的に再スローされることです。実際にはこのスレッドを強制終了させたくないので、これは問題です (UI スレッドだと思います)。そのため、ブロックを呼び出す必要がありThread.ResetAbort()ますcatch。例外。

これは一般的に推奨されないことに注意してください(スレッドを空から中止することも、中止が発生したときに中止することもありません)。それは正当化されます。Response.End()ExportToHttpResponse()

于 2013-06-11T05:16:49.773 に答える