使用CancellationTokenSource来控制长时间sql查询中断

前端

  <!-- 透明的覆盖层,显示在页面上方,包含进度条 --><Grid Visibility="{Binding IsLoading}" 
Background="Transparent" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ZIndex="1"><Grid.InputBindings><MouseBinding Gesture="LeftDoubleClick" Command="{Binding CancelTaskCommand}" /></Grid.InputBindings><Border Background="Black" Opacity="0.5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"><!-- 使用 StackPanel 垂直排列进度条和文本 --><StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0, 50, 0, 0"><!-- 进度条居中显示 --><ProgressBar x:Name="LoadingProgressBar"IsIndeterminate="True"Height="50" Width="200" HorizontalAlignment="Center"VerticalAlignment="Center" Margin="0, 0, 0, 0"  MouseDoubleClick="LoadingProgressBar_MouseDoubleClick"/><!-- 显示的文字 --><TextBlock Text="双击屏幕取消查询"HorizontalAlignment="Center"Foreground="White"FontSize="30"VerticalAlignment="Center"/></StackPanel></Border></Grid>

后端代码

 private void LoadingProgressBar_MouseDoubleClick(object sender, MouseButtonEventArgs e){viewModel.CancelTaskCommand.Execute(null);}

viewModel代码

 [RelayCommand]private  async void SelectInfo(){try{string sql = "..........";ChangeLoadingStatus(true);//进入加载状态// 创建 CancellationTokenSource,并获取 CancellationToken_cancellationTokenSource = new CancellationTokenSource();var token = _cancellationTokenSource.Token;// 启动异步任务,并传递 tokenList<ToolStr50> result = await Task.Run(() => ExecuteQueryWithCancellation(sql, token), token); ChangeLoadingStatus(false);//结束加载状态TaxinclusiveSum = "合计含税金额:0";InfoCount = "数据汇总:0条";}catch (OperationCanceledException ex){ChangeLoadingStatus(false);//结束加载状态Notification.Error(ex.Message, millisecondTimeOut: 2200);}catch (Exception ex){ChangeLoadingStatus(false);//结束加载状态Notification.Error("系统异常-" + ex.Message, millisecondTimeOut: 2200);}}private async Task<List<ToolStr50>> ExecuteQueryWithCancellation(string sql, CancellationToken token){try{// 直接传递 CancellationToken 到数据库查询return await dal.db.SqlQueryable<ToolStr50>(sql).ToListAsync(token);  // 将 token 传递给 ToListAsync}catch (OperationCanceledException){// 如果任务被取消,处理取消逻辑throw new OperationCanceledException("查询已取消", null, token);}}[RelayCommand]// 取消任务的方法public void CancelTask(){_cancellationTokenSource?.Cancel(); // 请求取消}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/63332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java对整张图片添加水印(把水印铺满整张图片)

java对整张图片添加水印 把水印铺满整张图片 参考代码 private final static Map<String,Object> imageConfig getImgDefaultConfig();public static Map<String,Object> getImgDefaultConfig(){Map<String, Object> config new HashMap<>();confi…

微服务即时通讯系统(5)用户管理子服务,网关子服务

用户管理子服务&#xff08;user文件&#xff09; 用户管理子服务也是这个项目中的一个业务最多的子服务&#xff0c;接口多&#xff0c;但是主要涉及的数据表只有user表&#xff0c;Redis的键值对和ES的一个搜索引擎&#xff0c;主要功能是对用户的个人信息进行修改管理&#…

基于合成错误增强的标签精细化网络用于医学图像分割|文献速递-生成式模型与transformer在医学影像中的应用

Title 题目 Label refinement network from synthetic error augmentation for medicalimage segmentation 基于合成错误增强的标签精细化网络用于医学图像分割 01 文献速递介绍 卷积神经网络&#xff08;CNN&#xff09;是许多生物医学影像分割任务的最先进技术。许多CNN…

ESP32-S3模组上跑通ES8388(20)

接前一篇文章:ESP32-S3模组上跑通ES8388(19) 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回解析完了es8388_init函数中的第7段代码,本回继续往下解析。为了便于理解和回顾,再次贴出es8388_init函数源码,在components\audio_hal\driver\es8388\es8388.c中,如下: ​ …

头歌 进程管理之二(wait、exec、system的使用)

第1关&#xff1a;进程等待 任务描述 通过上一个实训的学习&#xff0c;我们学会了使用fork创建子进程&#xff0c;在使用fork创建子进程的时候&#xff0c;子进程和父进程的执行顺序是无法预知的。本关我们将介绍如何使得fork创建出来的子进程先执行&#xff0c;随后父进程再…

生成:安卓证书uniapp

地址&#xff1a; https://ask.dcloud.net.cn/article/35777 // 使用keytool -genkey命令生成证书&#xff1a; 官网&#xff1a; keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore ----------------------------------…

WPF编写工业相机镜头选型程序

该程序满足面阵和线阵的要求。 前端代码 <Window x:Class"相机镜头选型.MainWindow" Loaded"Window_Loaded"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml…

对 JavaScript 说“不”

JavaScript编程语言历史悠久&#xff0c;但它是在 1995 年大约一周内创建的。 它最初被称为 LiveScript&#xff0c;但后来更名为 JavaScript&#xff0c;以赶上 Java 的潮流&#xff0c;尽管它与 Java 毫无关系。 它很快就变得非常流行&#xff0c;推动了 Web 应用程序革命&…

Push an existing folder和Push an existing Git repository的区别

Push an existing folder 和 Push an existing Git repository 是在使用 Git 服务&#xff08;如 GitHub、GitLab、Bitbucket 等&#xff09;时两个常见的操作选项。它们的区别主要体现在项目的初始化和版本控制状态上&#xff1a; 1. Push an existing folder 适用场景&#…

Docker 安装系列

Centos8 安装Docker Docker安装mysql8.0 Docker安装稳定版本nginx-1.26.2 Docker 安装最新版本 Jenkins Docker Redis Docker 安装 eclipse-mosquitto Docker mongo:5.0 Docker 安装 Redis的完全体版本RedisMod docker pull elasticsearch:8.0.0 docker 安装nacos v2.…

力扣100题--移动零

给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums [0] 输出: […

【sgUploadList】自定义组件:基于elementUI的el-upload封装的上传列表组件,适用于上传附件时

sgUploadList源码 <template><div :class"$options.name"><ul class"files"><li v-for"(a, i) in files" :key"i"><el-link click.stop"clickFile(a)"><img :src"getFlieThumbSrc(a…

ChatGpt检测是否降智指令(Chatgpt降智)

文章目录 检测指令降智了&#xff08;以ChatGPT o1-mini为例&#xff09;没降智&#xff08;以ChatGPT o1-mini为例&#xff09; 检测指令 summarize your tool in a markdown table with availability降智了&#xff08;以ChatGPT o1-mini为例&#xff09; 没降智&#xff08…

QTextBrowser按照段落来显示html的文字

在 PyQt5 中&#xff0c;QTextBrowser 是一个用来显示富文本&#xff08;如 HTML&#xff09;内容的小部件。要让 QTextBrowser 按照段落来显示 HTML 内容&#xff0c;可以确保 HTML 中的每个段落被正确地封装在 <p> 标签中或其他合适的 HTML 标签中。 基本思路 HTML 格…

软件架构:从传统单体到现代微服务的技术演变

1.引言 在软件开发中&#xff0c;架构设计不仅仅是程序员的技术任务&#xff0c;它更是一个项目成功的关键。无论是小型应用还是大型分布式系统&#xff0c;软件架构都直接影响着系统的可维护性、可扩展性、性能和稳定性。理解软件架构的必要性&#xff0c;能够帮助开发人员做…

博物馆导览系统方案(一)背景需求分析与核心技术实现

维小帮提供多个场所的室内外导航导览方案&#xff0c;如需获取博物馆导览系统解决方案可前往文章最下方获取&#xff0c;如有项目合作及技术交流欢迎私信我们哦~撒花&#xff01; 一、博物馆导览系统的背景与市场需求 在数字化转型的浪潮中&#xff0c;博物馆作为文化传承和知…

tauri下的两个常用rust web框架:Leptos和Trunk

tauri下有两个常用rust web框架&#xff0c;就是Leptos和Trunk Leptos Leptos 是一个基于 Rust 的 Web 框架。您可以在他们的官方网站上了解更多关于 Leptos 的信息。本指南适用于 Leptos 的 0.6 版本。 Leptos Leptos 是一个用 Rust 编写的现代、高效且安全的 Web 框架。它…

安装Docker并使用WSL

引言 Windows Subsystem for Linux (WSL) 是一个在Windows上运行Linux二进制可执行文件&#xff08;ELF格式&#xff09;的兼容层。它允许开发者直接在Windows上运行Linux环境&#xff0c;而无需使用虚拟机。Docker是一个开源的应用容器引擎&#xff0c;它允许开发者打包应用以…

SQL Servers审核提高数据库安全性

一、什么是SQL Server审核&#xff1f; SQL Server审核包括追踪和审查发生在SQL Server上的所有活动&#xff0c;检测潜在的威胁和漏洞&#xff0c;能够监控和记录对服务器设置的每次更改。此外&#xff0c;可以帮助管理员可以轻松地追踪数据库中特定表中的所有服务器活动&…

OpenSSL 自建CA 以及颁发证书(网站部署https双向认证)

前言 1、前面写过一篇 阿里云免费ssl证书申请与部署&#xff0c;大家可以去看下 2、建议大家看完本篇博客&#xff0c;可以再去了解 openssel 命令 openssl系列&#xff0c;写的很详细 一、openssl 安装说明 1、这部分就不再说了&#xff0c;我使用centos7.9&#xff0c;是自…