我的程序里面在后台任务中下载了PDF,需要在下载完成时对SQLITE数据库做一些操作,在下载某些大一点的PDF时,完成后,发现被检查了两次,导致插入数据库报约束异常,请问怎么解决?
代码如下:
private async Task HandleDownloadAsync(DownloadOperation download, bool isNew)
{
cgtitle cg = new cgtitle();
var pdffile = download.ResultFile;
var cginfo = await cg.GetInfo(pdffile.Name.ToString());
try
{
// 将 DownloadOperation 附加到 TransferModel,以便下载进度可通知
TransferModel transfer = new TransferModel();
transfer.DownloadOperation = download;
transfer.Source = download.RequestedUri.ToString();
transfer.Destination = download.ResultFile.Path;
transfer.Progress = "0 / 0";
transfer.cg_title = cginfo.c_cg_title;
_transfers.Add(transfer);
// 当下载进度发生变化时的回调函数
Progress<DownloadOperation> progressCallback = new Progress<DownloadOperation>(DownloadProgress);
if (isNew)
await download.StartAsync().AsTask(App._cancelToken.Token, progressCallback); // 新增一个后台下载任务
else
await download.AttachAsync().AsTask(App._cancelToken.Token, progressCallback); // 监视已存在的后台下载任务
if (download.Progress.Status == BackgroundTransferStatus.Completed)
{
//这里有时会被重复执行,如果不这样检查,那还有其它的检查方法有呢?????????????????????????
Debug.WriteLine(cginfo.i_generic_cg);
var pdffolder = await Utils.GetPdfFolder();
await pdffile.CopyAsync(pdffolder, pdffile.Name, NameCollisionOption.ReplaceExisting);
if (Common.Utils.IsNetworkAvailable())
{
try
{
await updateCgPdf(cginfo.i_generic_cg);
}
catch { }
}
showtip(cginfo.c_cg_title, "下载完成");
}
else
{
showtip(cginfo.c_cg_title, "下载失败");
}
}
catch (Exception ex)
{
// 将异常转换为 WebErrorStatus 枚举,如果获取到的是 WebErrorStatus.Unknown 则说明此次异常不是涉及 web 的异常
WebErrorStatus error = BackgroundTransferError.GetStatus(ex.HResult);
showtip(cginfo.c_cg_title, "下载失败");
}
finally
{
_transfers.Remove(_transfers.First(p => p.DownloadOperation == download));
}
}