Ответ 1
Просто измените блок catch на:
catch(ThreadAbortException ex)
{
}
catch(Exception ex)
{
}
чтобы вы могли обрабатывать ThreadAbortExceptions и все остальные отдельно.
Я не могу найти оператор "не является" в С#.
Например, у меня есть код ниже, который не работает. Мне нужно проверить, что err
не относится к типу class ThreadAbortException
.
catch (Exception err)
{
if (err is not ThreadAbortException)
{
}
}
Просто измените блок catch на:
catch(ThreadAbortException ex)
{
}
catch(Exception ex)
{
}
чтобы вы могли обрабатывать ThreadAbortExceptions и все остальные отдельно.
В этом случае оберните и проверьте значение boolean напротив:
if (!(err is ThreadAbortException))
Скорее всего, что вы должны сделать в этом случае:
try
{
// Do Something
}
catch (ThreadAbortException threadEx)
{
// Do something specific
}
catch (Exception ex)
{
// Do something more generic
}
У вас может быть несколько блоков catch
для try
. Всегда заказывайте их так, чтобы наиболее конкретный был сверху, а самый общий (catch (Exception ex)
) является последним, потому что порядок поиска сверху вниз, поэтому, если вы поместите catch (Exception ex)
во-первых, это всегда будет только один.
Вы должны сделать что-то вроде этого:
catch (Exception err){
if (!(err is ThreadAbortException)) {
//Code
}
}
Возможно, вы ищите это:
if(err.GetType() != typeof(ThreadAbortException))
{
}
Но я настоятельно рекомендую использовать отдельную инструкцию catch, как это предложил Ли.
catch(ThreadAbortException ex)
{
}
catch(Exception ex)
{
}
Ли имеет лучший ответ.
Просто чтобы добавить, вы всегда должны улавливать от самых конкретных до самых общих. В вашем случае ThreadAbortException
является наиболее конкретным, поэтому сначала применим это.