C# 异步操作
2015-03-26 16:17
78 查看
在程序中,普通的方法是单线程的。但中途如果有大型的操作,比如读取大文件,大批量操作数据库,网络传输等,都会导致程序阻塞,表现在界面上就是程序卡或者死掉,界面元素不动了,不响应了。C#异步调用很好的解决了这些问题。C#异步调用执行某个方法,程序立即开辟一个新线程去执行你的方法,主线程就不会死掉了。在这里需要注意,C#异步调用出来的新线程必须回收,不回收是浪费资源的可耻行为。
C#在回收线程时使用的是回调函数。C#异步调用结束后,自动调用此回调函数。C#中使用委托实际是使用的异步操作。下面为实例:
第一步:首先定义一个委托。
private delegate string DelegateName(int Num,out int Num2);
第二步:需要异步执行的方法。
private string MethodName(int Num,out int Num2)
{
Num2=Num;
return "Hello C#";
}
第三步:定义异步操作后执行的回调函数。
private void CallbackMethod(IAsyncResult ar)
{
//获取委托对象。
DelegateName dn=(DelegateName)ar.AsyncState;
//回收线程资源。
dn.EndInvoke(ar);
}
第四步:主程序代码
//实例化委托
DelegateName dn=new DelegateName(MethodName);
//执行异步操作
dn.BeginInvok(1000, new AsyncCallback(CallbackMethod), dn);
C#在回收线程时使用的是回调函数。C#异步调用结束后,自动调用此回调函数。C#中使用委托实际是使用的异步操作。下面为实例:
第一步:首先定义一个委托。
private delegate string DelegateName(int Num,out int Num2);
第二步:需要异步执行的方法。
private string MethodName(int Num,out int Num2)
{
Num2=Num;
return "Hello C#";
}
第三步:定义异步操作后执行的回调函数。
private void CallbackMethod(IAsyncResult ar)
{
//获取委托对象。
DelegateName dn=(DelegateName)ar.AsyncState;
//回收线程资源。
dn.EndInvoke(ar);
}
第四步:主程序代码
//实例化委托
DelegateName dn=new DelegateName(MethodName);
//执行异步操作
dn.BeginInvok(1000, new AsyncCallback(CallbackMethod), dn);
相关文章推荐
- C#(2005)异步委托操作
- C# 下面的代码示例演示如何结束异步操作以获取请求的流,然后开始一个请求以获取响应。....
- CLR_via_C#.3rd 翻译[25.7 使用专用线程执行异步的计算限制操作]
- C#客户端的异步操作
- C# BackgroundWorker实现WinForm异步操作的例子
- c#关于异步操作。
- !!c# 委托与多线程 -- 相比background来说,本方法针对当需要通过异步代理发起UI操作,而后线程中进行sleep操作的时使用
- C#异步操作样本1
- C#异步操作样本1
- C# BackgroundWorker实现WinForm异步操作的例子
- SOCKET Communication writen in C# (4) Socket 同步模式,异步模式操作
- C# 多线程与异步操作实现的探讨(非原创)
- C# BackgroundWorker实现WinForm异步操作的例子
- C# 使用APM执行受I/O限制的异步操作(转)
- C# :线程中操作多控件 (委托实现异步及同步的方法)
- C# 多线程与异步操作实现的探讨(推荐)
- C# BackgroundWorker实现WinForm异步操作的例子
- [转] C#异步操作
- C# 多线程与异步操作实现的探讨
- 利用C# 5 新特性 异步操作UI