tôi đã sau hòa bình của mã:cách tốt nhất để bắt "hủy thao tác bằng cách sử dụng" là gì ngoại lệ
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;
}
Làm thế nào tôi có thể xác định, đó là đánh bắt ngoại lệ là do hủy hoạt động. Trong trường hợp này ExecuteNonQuery ném ngoại lệ với mã lỗi 0x80131904, nhưng nó là ngoại lệ rất chung có thể được gây ra bởi nhiều lý do. Thông báo lỗi trông như sau: {"Đã xảy ra lỗi nghiêm trọng trên lệnh hiện tại. Kết quả, nếu có, sẽ bị hủy. \ R \ nHoàn tác bị hủy bởi người dùng."}
Tôi không thấy bất kỳ tùy chọn nào ngoại trừ phân tích cú pháp thông báo lỗi ... Bất kỳ ý tưởng nào?
Cảm ơn
PS. Vâng, tôi biết rằng lệnh Hủy cho hoạt động asyncronyc có lẽ không phải là ý tưởng tốt nhất, bởi vì đối với .NET 2.0 đã có cảnh báo trên MSDN, nhưng đối với .NET 4.0, cảnh báo này bị loại bỏ. Và tôi cũng không thích việc triển khai một khi hủy bỏ phương pháp được gọi là từ thread khác, như đối với tôi nó làm cho mã khó khăn hơn
Đây có phải là biểu mẫu chiến thắng không? – Likurg
Không, đây chỉ là một thư viện lớp, hoạt động với cơ sở dữ liệu thông qua các lớp ADO.NET (.NET 4.0). Vì vậy, tôi không thể sử dụng BackgroundWorker :) – and85
Ok, bạn sẽ sử dụng thư viện ur trong winforms? Hay ở đâu? – Likurg