C# 异步调用(存档)
来源:互联网 发布:网络暑假工招聘 编辑:程序博客网 时间:2024/04/30 20:51
我们要明确,为什么要进行异步回调?众所周知,普通方法运行,是单线程的,如果中途有大型操作(如:读取大文件,大批量操作数据库,网络传输等),都会导致方法阻塞,表现在界面上就是,程序卡或者死掉,界面元素不动了,不响应了。异步方法很好的解决了这些问题,异步执行某个方法,程序立即开辟一个新线程去运行你的方法,主线程包括界面就不会死掉了。异步如何开始,好理解,现在我们讨论的是如何结束这个异步出来的新线程。
首先,异步出来的新线程,必须回收,不回收是浪费资源的可耻行为,.NET也是不允许的,所以你别想钻空子,俗话说,请神容易送神难,就是这个道理。下面你可以很容易想到,回收分为2种情况:主动回收和被动回收(当然,这是我自己的理解,微软可不是这么说的),主动回收就是,你去监视那个线程,并且等待,当异步方法完成了,就把异步线程回收,焦点回归主线程,实际上就是上篇文章《C#异步初步》的那种情况,BeginInvoke之后又EndInvoke,如果在EndInvoke的时候,该异步线程没有完成操作,那么整个程序,包括主线程,又在阻塞了,又会出现界面“死”的情况。要想解决这个问题,就使用“被动回收”方式,其中一个重要的办法就是“异步回调”。
核心有二:
A、 用回调函数(本例中为CallBackMethod),异步结束后,自动调用此回调函数。
B、 而不在主线程中手工等待异步结束,如上两例中在主线程中调用EndInvoke。此种方法,是在回调函数中调用EndInvoke的。
异步回调的大概流程是这样的:首先启动异步,启动参数加上异步结束时执行的方法,然后这个异步线程就不用管了,最后当这个异步线程自己完成工作了,就自动执行启动参数里的那个方法,这样确实很省心,可是代码写起来,就很复杂了。
下面是搜藏的代码:
- C# 异步调用(存档)
- C# 调用Windows API(存档)
- C#多线程浅谈(存档)
- C#集合类(存档)
- C#结构体(存档)
- C# 委托(同步调用、异步调用、异步回调)
- c# 存档
- (转帖)C#中的异步调用
- C#异步调用
- C#异步方法调用
- C# 异步调用
- C# 异步调用
- C#的异步调用
- C#的异步调用
- C#异步方法调用
- C#异步调用
- C#异步调用
- C# 异步调用
- JDBC编程步骤实例
- linux——vi编辑器基本使用方法
- SQL Alias
- ORA-16038,ORA-19809,ORA-00312
- eclipse颜色设置以及常用快捷键
- C# 异步调用(存档)
- Servlet笔记
- 唐骏资料
- COM编程入门
- 《程序员》火热七月:中国ISV生存现状调查报告
- String和StringBuffer的区别
- 关于 FROM tableA,tableB 和 tableA LEFT JOIN tableB on 的区别
- 采用反射模拟简单的ORMapping
- Sql Server 导出数据库结构