he tras la paz de código:¿Cuál es la mejor manera de coger la "Operación cancelada por el usuario" excepción
IAsyncResult beginExecuteReader = command.BeginExecuteNonQuery();
while (!beginExecuteReader.IsCompleted)
{
if (controllerTask.CancellationTokenSource.IsCancellationRequested)
{
command.Cancel();
}
Thread.Sleep(100);
}
try
{
result = command.EndExecuteNonQuery(beginExecuteReader);
}
catch (SqlException exception)
{
if (exception.ErrorCode == OperationCanceled)
{
throw new OperationCanceledException();
}
throw;
}
¿Cómo puedo identificar, que atrapó excepción es causada por la operación de cancelación. En este caso, ExecuteNonQuery lanza una excepción con el código de error 0x80131904, pero es una excepción muy general que puede deberse a muchas razones. El mensaje de error tiene este aspecto: {"Se produjo un error grave en el comando actual. Los resultados, si los hay, deben descartarse. \ R \ nOperación cancelada por el usuario."}
No veo ninguna opción excepto análisis del mensaje de error ... ¿Alguna idea?
Gracias
PS. Sí, sé que el comando Cancelar para la operación asyncronyc probablemente no sea la mejor idea, porque para .NET 2.0 hubo una advertencia en MSDN, pero para .NET 4.0 esta advertencia se eliminó. Y yo también no como otras implementaciones cuando se cancela método es llamado desde otro hilo, que para mí tiene un código más difícil
¿Es esto winforms? – Likurg
No, esta es solo una biblioteca de clases, que funciona con bases de datos a través de clases ADO.NET (.NET 4.0). Entonces no puedo usar BackgroundWorker :) – and85
Ok, ¿usarás tu biblioteca en winforms? ¿O donde? – Likurg