![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 62
zxy2847225301
毕业于广东工业大学,多年C#一线开发经验,熟悉常用数据库
展开
-
(翻译)异步编程:Async/Await在ASP.NET中的介绍
本文翻译自:Async Programming - Introduction to Async/Await on ASP.NET | Microsoft Docs下面翻译的内容以第一人称进行,由于翻译作者水平有限,有不对的地方请指正 网上很多的教程围绕async/await展开的内容都是以开发客户端应用程序为主。能在Server端中使用async吗?答案是肯定的。本文介绍ASP.NET异步请求相关概念以及对应网络资源的参考链接。本文我不会涉及 async或await的语法,因为我已经写过相关的翻译 2022-06-26 20:56:56 · 259 阅读 · 0 评论 -
利用反射实现异步执行的方法顺序执行(C#)
由于作者水平有限,如写得不对的地方望指正当你的应用中有很耗时的操作需要执行时,我们一般采取异步的方式执行,先说一下我今天碰到的业务场景(我们是做医疗软件的):就是门诊医生站的病历,医生签署医嘱时,需要把医嘱信息插入到病历中并导出pdf并上传到文件服务器中(记为步骤1),医生撤销(取消签署)医嘱时,需要把病历中的医嘱信息去掉并导出pdf上传到文件服务器中(记为步骤2),但“导出pdf并上传到文件服务器”这一步很耗时,严重影响到用户的体验,首先想到的是用多线程的方式实现,但是这里有一个问...原创 2022-05-18 21:57:54 · 1264 阅读 · 0 评论 -
C#利用异步操作类AsyncOperation实现子线程更新UI(方式6)
其实BackgroundWorker源码就是使用了AsyncOperation类的Post实现子线程更新UI,如下图:好了,不说了,开始我们的DemoUI布局如下:Form1代码如下: publicpartialclassForm1: Form { //异步操作对象 privateAsyncOperation asyncOperation; publicForm1(...原创 2022-04-05 21:34:34 · 1729 阅读 · 0 评论 -
C#利用BackgroundWorker实现子线程更新UI(方式5)
由于作者水平有限,如有错误请指正下面的只是大概演示的例子,为了简单,代码安全校验不考虑UI窗体如下:Form1代码如下:public partial class Form1 : Form { BackgroundWorker backgroundWorker = new BackgroundWorker(); public Form1() { InitializeComponent();原创 2022-04-04 20:23:44 · 1520 阅读 · 0 评论 -
(不建议使用,方式4)C#利用Control.CheckForIllegalCrossThreadCalls属性直接实现子线程更新UI线程
如果直接在子线程中对UI控件操作,会提示如下的错误:System.InvalidOperationException,Message=线程间操作无效: 从不是创建控件“textBox1”的线程访问它。直接在窗体构造方法中加上这一句:Control.CheckForIllegalCrossThreadCalls = false;然后运行程序就不会报错了全部代码如下: public partial class Form1 : Form { p原创 2022-04-04 19:57:15 · 533 阅读 · 0 评论 -
C#利用Win32的SendMessage实现子线程更新UI(方式3)
通过跟踪winform的Invoke方法,发现Control控件也是调用Win32的API实现子线程更新UI,只不过是多加了线程安全控制同时也发现,有个死循环调用的虚方法,类似于Unity3D的Update方法没错,上面的方法就是UI控件处理Window消息并实时更新UI的方法,这样我们就可以监听类似于鼠标双击和鼠标滚轮滚动的消息了,然后可以做一些额外的操作UI布局如下:新增类Win32API(网上抄的),并编辑如下:public class Win32API .原创 2022-04-04 19:45:14 · 1019 阅读 · 0 评论 -
C#利用异步和委托实现子线程更新UI(方式2)
UI布局如下:声明委托: public delegate void AsyncDelegate(TextBox textBox);Form代码如下: publicpartialclassForm1: Form { AsyncDelegate asyncDelegate = null; publicForm1() { InitializeComp...原创 2022-04-04 19:05:16 · 1228 阅读 · 1 评论 -
C#利用Invoke和委托实现子线程更新UI(方式1)
UI布局如下委托定义如下:public delegate void GetStringDelegate(TextBox textBox);From1的代码如下: public partial class Form1 : Form { SetMessageDelegate setMessageDelegate = null; public Form1() { InitializeComponent.原创 2022-04-04 18:45:38 · 2171 阅读 · 0 评论