اگر در یک try – catch با یکی از دستورات Server.Transfer یا Response.Redirect از block خارج شوید، چنین خطایی دریافت می کنید. علت نیز کاملا واضع است. چون شما Thread مربوطه را بلا تکلیف رها می کنید و قبل از پایان یافتن کار آن Thread ، می خواهید آن را ترک کنید. و در صورتی که در catch دستوری قرار داده باشید تا به کاربر اعلام کنید که خطایی اتفاق افتاده است. بدیهی است که عمل موردنظر، با موفقیت انجام شده است ولی کاربر خطا دریافت خواهد کرد.
یکی راه های مقابله با این خطا این است که اگر می خواهید از دستورات بالا استفاده کنید، یک متغیر منطقی (Boolean) بگیرید و در صورتی که عمل موردنظر موفقیت آمیز بود، آن را با مقدار true مقداردهی کنید و بیرون از بدنه try – catch در صورت درست بودن متغیر به آدرس موردنظر خود redirect کنید.
راه بعدی این است که نوع خطا را بررسی کنید، در صورتی که با خطای بالا یکی بود، از آن صرف نظر کنید.
وضعیت Thread در ThreadState نگهداری می شود. با and کردن ThreadState با مقادیری که نمی خواهید به ازای آنها خطایی اتفاق بیفتد (مثل Aborted) به نتیجه دلخواه خود را برسید. (وضعیت Thread به صورت بیتی نگهداری می شود و اگر چند مورد از وضعیت ها با هم اتفاق بیفتند با هم Or میشوند.)
مثال :
if ((Thread.CurrentThread.ThreadState & (ThreadState.Aborted | ThreadState.AbortRequested)) == 0)
{
Do Something
}