При открытии формы (
.net4, WinForm app, один SqlConnection на все приложение) в обработчике события
Load происходит длительный запрос к БД, который выполняется асинхронно. Если пользователю надоест ждать, он жмет на крестик, форма закрывается. Как в это случае очистить
SqlDaraReader?
public static SqlDataReader SafeExecuteReader(SqlCommand command, AutoResetEvent evtCancel)
{
IAsyncResult res = command.BeginExecuteReader();
Int32 index = WaitHandle.WaitAny(new WaitHandle[] { res.AsyncWaitHandle, evtCancel }, command.CommandTimeout * 1000);
if (index == 1 && !res.IsCompleted)
{
try
{
//например так?
//SqlDataReader reader = command.EndExecuteReader(res);
//if (reader != null) reader.Close();
}
catch (SqlException /*sex*/) { }
return null;
}
else if (!res.IsCompleted)
{
//command.EndExecuteReader(res);
throw new Exception("Timeout");
}
return command.EndExecuteReader(res);
}
Или
EndExecuteReader необходим только для завершения асинхронного выполнения и возвращения запрошенного
SqlDataReader?