C# Ajax / Async (Msxml2.XMLHTTP)

从下面的代码你可以知道它是存异步的Ajax,objAjax.onreadystatechange =

new OnReadyStateChange(objAjax, new EventHandler(OnReadyStateChange))

与JScript代码ajax.onreadystatechange = function() { };本质是差不多的,只不过

我使用的方法是它内部的形式。

    public class Program
    {
        public static void Main(string[] args)
        {
            dynamic objAjax = Activator.CreateInstance(Type.GetTypeFromProgID("Msxml2.XMLHTTP"));
            objAjax.open("GET", "http://blog.csdn.net/u012395622", true);
            objAjax.onreadystatechange = new OnReadyStateChange(objAjax, new EventHandler(OnReadyStateChange));
            objAjax.send(null);

            Console.ReadKey(false);
        }

        public static void OnReadyStateChange(object sender, EventArgs e)
        {
            dynamic objAjax = sender;
            if (objAjax.readyState == 4 || objAjax.status == 200)
                Console.WriteLine("success\r\n" + objAjax.responseText);
            else
                Console.WriteLine("fail");
        }
    }

有很多人在C#使用Ajax没有办法去添加回调函数

但是他们却很聪明的采取了另一种办法,及ajax.waitForResponse(timeoutInSeconds)

Wait for asynchronous send to complete, with optional timeout.

一般都是提供INFINITE = -1不过这样做会阻塞线程,但是不会阻塞UI记得几年前有人

做过这个实验,不顾当时它是用的Winhttp / COM对象,说到Winhttp我倒是有一篇帖

子是封装的Winhttp / COM示例代码是包含简单的一个短点续传下载的法子,你们倒是

可以看看虽然肯定会有些人不削 不过本人并不在意  易语言 排斥语言可不是好程序员。

http://bbs.125.la/forum.php?mod=viewthread&tid=13771462 不过我既然说到是异步

方式那么肯定会是异步,否则不是打了我自己的脸不是,呵呵 总是会感到那么的愉悦?

using System;
using System.Reflection;
using System.Globalization;
    public class OnReadyStateChange : IReflect
    {
        private volatile object m_sender;
        private volatile IReflect m_reflect;
        private volatile EventHandler m_event;

        public OnReadyStateChange(object sender, EventHandler eventHandler)
        {
            this.m_sender = sender;
            this.m_event = eventHandler;
            this.m_reflect = typeof(OnReadyStateChange);
        }

        Type IReflect.UnderlyingSystemType
        {
            get
            {
                return this.m_reflect.UnderlyingSystemType;
            }
        }

        FieldInfo IReflect.GetField(string name, BindingFlags bindingAttr)
        {
            return this.m_reflect.GetField(name, bindingAttr);
        }

        FieldInfo[] IReflect.GetFields(BindingFlags bindingAttr)
        {
            return this.m_reflect.GetFields(bindingAttr);
        }

        MemberInfo[] IReflect.GetMember(string name, BindingFlags bindingAttr)
        {
            return this.m_reflect.GetMember(name, bindingAttr);
        }

        MemberInfo[] IReflect.GetMembers(BindingFlags bindingAttr)
        {
            return this.m_reflect.GetMembers(bindingAttr);
        }

        MethodInfo IReflect.GetMethod(string name, BindingFlags bindingAttr)
        {
            return this.m_reflect.GetMethod(name, bindingAttr);
        }

        MethodInfo IReflect.GetMethod(string name, BindingFlags bindingAttr, Binder binder, Type[] types, ParameterModifier[] modifiers)
        {
            return this.m_reflect.GetMethod(name, bindingAttr, binder, types, modifiers);
        }

        MethodInfo[] IReflect.GetMethods(BindingFlags bindingAttr)
        {
            return this.m_reflect.GetMethods(bindingAttr);
        }

        PropertyInfo[] IReflect.GetProperties(BindingFlags bindingAttr)
        {
            return this.m_reflect.GetProperties(bindingAttr);
        }

        PropertyInfo IReflect.GetProperty(string name, BindingFlags bindingAttr)
        {
            return this.m_reflect.GetProperty(name, bindingAttr);
        }

        PropertyInfo IReflect.GetProperty(string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers)
        {
            return this.m_reflect.GetProperty(name, bindingAttr);
        }

        object IReflect.InvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters)
        {
            if(name == "[DISPID=0]" && this.m_event != null)
                this.m_event(this.m_sender, EventArgs.Empty);
            return this.m_reflect.InvokeMember(name, invokeAttr, binder, target, args, modifiers, culture, namedParameters);
        }
    }
时间: 2024-11-05 18:41:15

C# Ajax / Async (Msxml2.XMLHTTP)的相关文章

jquery的$.ajax async使用详解

async在jquery ajax中是一个同步参数了,我们下面来给大家介绍在jquery ajax中使用async时碰到的一些问题与方法介绍,希望例子能给各位同学带来一些帮助哦. async默认是true, 即为异步方式, $.Ajax执行后, 会继续执行ajax后面的脚步, 直到服务器端返回数据后, 触发$.Ajax里的success方法. 这时候执行的是两个线程. var temp; $.ajax({ async: false, type : "POST", url : defau

$.ajax async同步加载

(默认: true) 默认设置下,所有请求均为异步请求.如果需要发送同步请求,请将此选项设置为 false.注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行. var temp; $.ajax({ async: false, type : "POST", url : defaultPostData.url, dataType : 'json', success : function(data) { temp=data; } }); alert(temp); 这个aja

Ajax async属性

async: 默认是true:异步,false:同步. 其他属性扩展: 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持. 3.timeout: 要求为Number类型的参数,设置请求超时时间(毫秒).此设置将覆盖$.ajaxSetup()方法的全局设置. 4.async: 要求为Boolean类

jQuery的ajax async同步和异步介绍

项目中有这样一个需求,使用ajax加载数据返回页面并赋值,然后前端取出该值 这其中涉及到代码的顺序问题,有时后台还未返回数据,但已执行后面代码, 所以就会造成取不到值 $.ajax({ type: "post", url: "admin/PfmOptionRuleItem.do", success: function(data){ $("#ruleItem").val(data.ruleItem); //① } }); return $(&quo

Ajax:async

参考: https://www.cnblogs.com/yiliweichinasoft/p/3667365.html async   英[?'z??k]   美[?'z??k] adj. 异步的; 默认:true 默认是异步(true),如果需等待后台返回结果则需要改为同步(async:false). 同步:需要等待反馈信息,锁死浏览器,直到后台执行结束. 异步:无须等待反馈,随便你什么时候执行完成. 比如: 你叫我去吃饭,我听到了就立刻和你去吃饭,如果我没有听到,你就会一直叫我,直到我听见和

.Ajax(async异步与sync同步)

异步,不会阻碍代码的执行,它会等待所有的同步代码执行完毕后,再执行输出自己的同步结果.(原生js中,只有定时器,DOM,ajax三个东西是异步的.) 同步,代码只会从上到下依次执行,只要一步出错,接下来的代码就会无法执行. 原文地址:https://www.cnblogs.com/luoluo-snow/p/11511109.html

Ajax请求中的async:false/true的作用[转]

test.html <a href="javascript:void(0)" onmouseover="testAsync()"> asy.js function testAsync(){    var temp;    $.ajax({        async: false,        type : "GET",        url : 'tet.php',        complete: function(msg){  

Ajax请求中的async:false/true的作用

最近做东西用到ajax,我在火狐下firebug打断点一点问题都没有,可是关了firebug,程序不进后台方法,纳闷了好久,从来没有遇到过这种情况,最后加了一个参数async:false好了,还是很纳闷,以前写了那么多ajax相关代码从来没遇到过这种情况,原来对asy:nc:false的含义不大了解,还有可能和现在这个平台有关系吧.async boolean default: trueby default, all requests are sentasynchronous (e.g. this

Jquery中Ajax异步请求中的async参数的作用

之前不知道这个参数的作用,上网找了前辈的博客,在此收录到自己的博客,希望能帮到更多的朋友: test.html <a href="javascript:void(0)" onmouseover="testAsync()"> asy.js function testAsync{ var temp;     $.ajax({         async: false,         type : "GET",         url :