2 wayzinc wayzinc 于 2016.03.21 16:47 提问

C#同/异步委托使用和调用,请指教

public delegate void GetResultEventHandler(object sender, bool IsSucceed, string DataResults);
public event GetResultEventHandler OnGetInfoCompleted;
public void GetPostHtmlResults(string GetURL, int GetTimeOut)
{
HttpWebRequest request = HttpWebRequest.CreateHttp(GetURL);
request.Method = "GET";
request.ContinueTimeout = GetTimeOut;
request.BeginGetResponse(GetInfoCompleted, request);
}
private void GetInfoCompleted(IAsyncResult asyncResult)
{
try
{
HttpWebRequest webRequest = asyncResult.AsyncState as HttpWebRequest;
HttpWebResponse webResponse = (HttpWebResponse)webRequest.EndGetResponse(asyncResult);
Stream streamResult = webResponse.GetResponseStream();
StreamReader reader = new StreamReader(streamResult, Encoding.UTF8);
if (OnGetInfoCompleted != null)
OnGetInfoCompleted(this, true, reader.ReadToEnd());
}
catch (WebException ex)
{
OnGetInfoCompleted(this, false, ex.Message.ToString());
}
}
请问这个同/异步委托对不对,还有怎样调用它,谢谢!

1个回答

caozhy
caozhy   Ds   Rxr 2016.03.21 18:01

从语法上说没什么问题,但是你本身GetResponseStream是同步的,所以包装成异步的没有实际意义。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
c#使用委托实现异步调用
异步编程是受公共语言运行库的许多领域(如远程处理、ASP.NET 和 Windows 窗体)支持的功能。异步编程是 .NET Framework 中的核心概念。使用 .NET 异步编程,在程序继续执行的同时对 .NET 类方法进行调用,直到进行指定的回调为止;或者如果没有提供回调,则直到对调用的阻塞、轮询或等待完成为止。异步编程是由 .NET Framework 的许多区域支持的功能,这些区域
C# 多线程 用委托实现异步_调用委托的BeginInvoke和EndInvoke方法
1.C#中的每一个委托都内置了BeginInvoke和EndInvoke方法,如果委托的方法列表里只有一个方法,那么这个方法就可以异步执行(不在当前线程里执行,另开辟一个线程执行)。委托的BeginInvoke和EndInvoke方法就是为了上述目的而生的。 2.原始线程发起了一个异步线程,有如下三种执行方式: 方式一:等待一直到完成,即原始线程在发起了异步线程以及做了一些必要处理之后,原始线
C#中定时器的是使用及异步委托
简单定时器使用及delegate的begininvoke,测试其异步调用是否真的开辟了线程,同时提供异步委托执行完成后的函数处理
异步委托跨线程访问控件解决界面卡死
下面来看第二种方案,就是使用delegate和invoke来从其他线程中控制控件信息。网上有很多人写了这种控制方式,然而我看了很多这种帖子,表明上看来是没有什么问题的,但是实际上并没有解决这个问题,首先来看网络上的那种不完善的方式: public partial class Form1 : Form     {         private delegate void FlushClien
[深入学习C#]完成异步委托的三种方式
简介  创建线程的一个简单方式是定义一个委托,并且异步调用它。委托是方法的类型安全的引用。Delegate类还支持异步地调用方法。在后台,Delegate类会创建一个执行任务的线程。线程  线程是程序中独立的指令流,线程对客户端和服务器端应用程序都非常重要,线程是运行程序所必须的。   1.进程包含资源,如Window句柄、文件系统句柄或其他内核对象,每个进程都分配了虚拟内存。   2.每个进程
委托-异步调用-泛型委托-匿名方法-Lambda表达式-事件
1. 委托 From: http://www.cnblogs.com/daxnet/archive/2008/11/08/1687014.html 类是对象的抽象,而委托则可以看成是函数的抽象。一个委托代表了具有相同参数列表和返回值的所有函数。 class Program { delegate int CalculateDelegate(int a,
C#使用多线程并发之异步委托IAsyncResult
使用委托开启多线程(多线程深入)1、用委托(Delegate)的BeginInvoke和EndInvoke方法操作线程 BeginInvoke方法可以使用线程异步地执行委托所指向的方法。然后通过EndInvoke方法获得方法的返回值(EndInvoke方法的返回值就是被调用方法的返回值),或是确定方法已经被成功调用。 class Program { private delegate int New
C# 委托的三种调用示例(同步调用 异步调用 异步回调)
本文将主要通过同步调用、异步调用、异步回调三个示例来讲解在用委托执行同一个加法类的时候的的区别和利弊 首先,通过代码定义一个委托和下面三个示例将要调用的方法: 复制代码代码如下: public delegate int AddHandler(int a,int b);     public class 加法类     {         pu
C#中委托异步调用输出日志
很简单的一个输出日志信息的操作,每次只需要new 一个委托,然后使用BeginInvoke异步调用委托函数即可,不会阻塞主进程。这里只是简单的写了,并没有对日志的大小做限制,理论上只要磁盘空间足够,就可以一直向日志文档中写入。
Unity之C#——异步委托开启线程,三种方法检测结束
异步委托开启线程,三种方法检测结束