Mam w następstwie pokoju kodu:Jaki jest najlepszy sposób, aby złapać „Operacja anulowana przez użytkownika” wyjątek
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;
}
jaki sposób można zidentyfikować, że przechwycony wyjątek spowodowany jest anulowanie operacji. W tym przypadku ExecuteNonQuery zgłasza wyjątek z kodem błędu 0x80131904, ale jest to bardzo ogólny wyjątek, który może być spowodowany wieloma przyczynami. Komunikat o błędzie wygląda następująco: {"Wystąpił poważny błąd w bieżącej komendzie. Wyniki, jeśli są, powinny zostać odrzucone. \ R \ nOperacja anulowana przez użytkownika."}
Nie widzę żadnych opcji z wyjątkiem parsowanie komunikatu o błędzie ... Jakieś pomysły?
Dzięki
PS. Tak, wiem, że polecenie Anuluj dla operacji asyncronyc prawdopodobnie nie jest najlepszym pomysłem, ponieważ dla .NET 2.0 było ostrzeżenie na MSDN, ale dla .NET 4.0 to ostrzeżenie zostało usunięte. A ja też nie lubię, gdy kolejne implementacje anulować metoda jest wywoływana z innego wątku, jak dla mnie, to sprawia, że kod trudniejsze
Czy to jest winForm? – Likurg
Nie, to jest po prostu biblioteka klas, która działa z bazą danych za pośrednictwem klas ADO.NET (.NET 4.0). Więc nie mogę użyć BackgroundWorker :) – and85
Ok, użyjesz biblioteki biblioteki w winformach? Czy gdzie? – Likurg