随笔分类 - .NET 异步委托
线程暂停与继续
摘要:这篇文章主要是答复百度网友的问题的,代码做了注释,就不解释了。线程的暂停,我使用了WaitOne方法,线程的继续,则使用了set方法,其实,这两种方法都存在于AutoResetEvent类中,这个类主要是通过设置信号量来实现线程的暂停与继续的。
阅读全文
委托-利用GetInvocationList处理链式委托
摘要:主要介绍了GetInvocationList来处理委托链的问题。
阅读全文
由INotifyPropertyChanged,BindingList绑定引发的跨线程异常及其解决办法
摘要:主要讲解了由INotifyPropertyChanged,BindingList绑定引发的跨线程异常及其解决办法
阅读全文
我所知道的.NET异步
摘要:对于异步,相信大家都不十分陌生。准确点来说就是方法执行后立即返回,待到执行完毕会进行通知。就是当一个任务在执行的时候,尤其是需要耗费很长的时间进行处理的任务,如果利用单线程进行操作的话,势必造成界面的阻塞;而利用异步方式,则不会出现这种情况。 区别于同步处理,可以说阻塞的异步其实就相当于同步。
阅读全文
浅谈C#中常见的委托
摘要:一提到委托,浮现在我们脑海中的大概是听的最多的就是类似C++的函数指针吧,呵呵,至少我的第一个反应是这样的。
关于委托的定义和使用,已经有诸多的人讲解过,并且讲解细致入微,尤其是张子阳的那一篇。我就不用多废话了。
今天我要说的是C#中的三种委托方式:Func委托,Action委托,Predicate委托以及这三种委托的常见使用场景。
阅读全文
EventWaitHandle使用方法小记
摘要:在项目制作的过程中,由于程序需要处理的数据量比较大,所以采用异步的方式来进行,也就是利用委托的BeginInvoke方法和EndInvoke方法来进行。效果很不错,达到了预期。但是由于程序在运行的时候,需要先加载数据,数据加载完成以后,然后进行数据比对差异,并对有差异的数据进行着色处理,在这儿,问题就来了。
什么问题呢?我们知道,当利用异步的时候,实际上系统会自动为我们创建前后台交互线程,那么这个数据加载和差异着色就运行在了这样的线程之上,所以二者的运行先后顺序是不可知的,事实上,程序中着色的混乱也验证了这一点:那就是我虽然原本想让数据加载完成后在进行代码差异着色,可是实际运行的时候发现,数据是边加载边着色的,这也归咎到如何将多个线程合并为一个并且按序运行的问题。
阅读全文
异步调用之精简方式
摘要:如果当一个页面中有大量的控件要涉及到UI交互,并且这些控件需要好多不同的参数,那么我们就不得不为这些控件声明具有不同参数的委托类型,然后再利用InvokeRequired来判断,最后编写世纪操控控件的代码。如果真是这样,那么这个工作量可真的是很大。并且这种Copy/Paste的工作可能让你发疯,重用性太差了,有没有好一点的方法呢?当然有:
通过观察发现,每个控件在进行线程和UI交互的时候,都需要判断以下是否需要进行线程交互(也就是判断是否需要InvokeRequired),那么这个操作能不能集成到一个类中完成呢?
阅读全文
基于异步方式的语法着色器
摘要:首先说明一下,我这里的异步方式是指获取代码文件的时候,采用的是异步方式,其原因就是我要搜索C:\Program Files文件夹下面的含有关键字为scyGroupBox的代码文件。那么,从我的描述就可以知道,这是一个相当费时的操作,而如果利用程序来遍历这个文件夹,其结果就是将要耗费数秒钟或者更长的时间,并且同步操作会导致界面在搜索完毕后才出来,这样用户就不得不等待几秒钟甚至是数十秒钟,这种体验是相当不友好的。
阅读全文
异步处理与界面交互
摘要:当我们读取一个大数据量的数据表的时候,如果采用直接读的方式,很容易造成界面成为“白板”的现象,这也是所谓的假死。这种方式并不是十分好,因为它不能让用户非常直观的看到界面(比如加入进度条显示进度),所以需要有一种手段来防止这种现象的发生。在.net中,要实现这种方式很容易,我们只要利用BeginInvoke开启异步操作即可。首先是开始前的准备工作,我们往Person表中插入一百万数据作为测试数据:
阅读全文
BackgroundWroker使用方法备忘
摘要:using System;using System.ComponentModel;using System.Windows.Forms;using System.Threading;namespace WindowsFormsApplication1{ publicpartialclass Form1 : Form { public Form1() { InitializeComponent(); worker =new BackgroundWorker(); worker.DoWork+...
阅读全文