2015-09-17 2 views
1

Я хочу остановить Page_Load, если он не будет завершен после определенного (настраиваемого) количества времени, а затем запишите ошибку на страницу и верните страницу.Остановить загрузку страницы и вернуть результат через определенное время

Я попытался использовать различные таймеры, например, так:

В Page_Load:

System.Threading.Timer t = new System.Threading.Timer(ThrowExceptionAfterTimeElapsed, null, 4000, 10000000); 

, а затем ...

void ThrowExceptionAfterTimeElapsed(object sender, EventArgs e) 
{ 
    throw new Exception(); 
} 

А потом написать об ошибке на страницу на catch в Page_Load, но это не работает, поскольку таймер использует другой поток.

Я также пробовал javascript setInterval на странице itslef, но функция в нем никогда не вызывалась (и я не знаю, как остановить загрузку страницы на сервере от клиента).

Итак, как мне остановить Page_Load, запустите несколько строк кода и верните страницу клиенту?

+1

Это не совсем понятно, что вы пытаетесь достичь, но, скорее всего, вы должны делегировать любую «длинную» операцию, которую вы делаете в 'Page_Load', для асинхронной операции и иметь слишком длительный тайм-аут операции. – Amit

ответ

0

Законченное решение, используя httpRuntime «s executionTimout атрибут в web.config:

<!-- The time (in seconds) for server to throw a 500 exception 
    (to be handled by custom redirect. see below customError node). 
    NOTE: This only works when debug="false" in compilation node. 
    --> 
    <httpRuntime executionTimeout="1"/> 
    <customErrors mode="On" redirectMode="ResponseRedirect" defaultRedirect="~/serverError.html"> 
     <error statusCode="500" redirect="~/serverError.html"/> 
    </customErrors> 

..И создавая ошибки страницы сервера

Смежные вопросы