我有以下的代碼和平:什麼是趕上「用戶取消操作」的最佳途徑異常
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;
}
我如何確定,是逮住異常被取消的操作引起的。在這種情況下,ExecuteNonQuery拋出錯誤代碼爲0x80131904的異常,但這是非常普遍的異常,可能由多種原因引起。錯誤消息如下所示:{「當前命令發生嚴重錯誤,應該丟棄結果(如果有)。\ r \ n用戶取消操作。」}
我沒有看到任何選項,除解析錯誤消息...任何想法?
謝謝
PS。是的,我知道取消命令asyncronyc操作可能不是最好的想法,因爲對於.NET 2.0在MSDN上有警告,但對於.NET 4.0,此警告被刪除。我也當解除方法是從另一個線程調用不喜歡另一種實現方式,因爲對我來說,使代碼更難
這是winforms嗎? – Likurg 2012-04-19 10:57:42
不,這只是一個類庫,它通過ADO.NET類(.NET 4.0)與數據庫一起工作。所以我不能使用BackgroundWorker :) – and85 2012-04-19 11:02:00
好吧,你會在winforms中使用你的庫?或者在哪裏? – Likurg 2012-04-19 11:14:49