- PR -

ASP.NET(C#) ThreadAbortExceptionの回避策について

1
投稿者投稿内容
ロンロン
ベテラン
会議室デビュー日: 2004/01/08
投稿数: 58
お住まい・勤務地: TOKYO
投稿日時: 2004-02-12 15:37
こんにちわ。
お世話になっております。

Response.End()メソッドを使用するとThreadAbortExceptionが発生し、
キャッチしても自動的にスローされてしまう特殊な例外であることは理解しました。
http://www.unisys.co.jp/club/net_view/20030327.html

ただし、
Response.End()を使用している箇所はどうしても処理を中断させたいケースなので、
Thread.ResetAbort()メソッドは使用したくありません。

そこで
Response.End()自体を使用せずに、
MSサポート情報にあるApplicationInstance.CompleteRequest()メソッドの使用を
試みたのですが、
記載にあるようなApplication_EndRequestイベントへのバイパスを行ってくれず、困っております。
http://support.microsoft.com/default.aspx?scid=kb;ja;312629


試しにPage_Loadメソッドに下記のようなコードを実装してみました。
############################################
private void Page_Load(object sender, System.EventArgs e) {
 this.Context.ApplicationInstance.CompleteRequest();
 //本来は↑ここで処理を止めて欲しい

 this.TextBox1.Text = "だめだこりゃ";
}

private void Button1_Click(object sender, System.EventArgs e) {
 this.TextBox1.Text += "Button1_Clickだめだこりゃ";
}
############################################


初回のPage_Loadで this.TextBox1.Text = "だめだこりゃ"; が通ってしまいます。
Button1のクリックイベント時にも
Page_Loadのthis.TextBox1.Text = "だめだこりゃ";
および Button1_Clickメソッドを通ってしまいます。


CompleteRequest()メソッドを使用することで
てっきりGlobal.asax.csのApplication_EndRequestメソッドまで
処理が飛んでくれると勝手に思い込んでいたのですが、
私はなにか大きな勘違いしているのでしょうか・・・?


ご存知の方がいらっしゃいましたらご教授のほどよろしくお願いいたします。
1

スキルアップ/キャリアアップ(JOB@IT)