zoukankan      html  css  js  c++  java
  • BeginInvoke和EndInvoke操作线程

    今天一个朋友和我说他有一个操作:就是在点某个按钮提交之后在后台执行一系列代码然后再返回前台,此时可能后台会执行相当长一段时间,所以他不需要管这个操作是否成功!只需要数据提交过来然后页面立马进入可用的状态(不能让页面进入假死状态)

    我纠结了很久,网上找了写资料看了,先看的是异步页面,没有心得,后来发现了这两个东西BeginInvoke和EndInvoke。

    BeginInvoke方法可以使用线程异步地执行委托所指向的方法。然后通过EndInvoke方法获得方法的返回值(EndInvoke方法的返回值就是被调用方法的返回值),或是确定方法已经被成功调用。

    具体代码如下

        protected void Page_Load(object sender, EventArgs e)
        {
            runDel = new runDelegate(SendEMail);
        }
    
        private delegate string runDelegate();
        private runDelegate runDel;
    
        protected void btnSend_Click(object sender, EventArgs e)
        {
            IAsyncResult asyncResult = runDel.BeginInvoke(FunCompleted, runDel);
            this.Page.ClientScript.RegisterStartupScript(this.GetType(), "", "alert('ddddd')", true);
        }
    
        private void FunCompleted(IAsyncResult ar) 
        {
            if (ar == null)
            {
                return;
            }
            string abc = (ar.AsyncState as runDelegate).EndInvoke(ar).ToString();
        }  
    

     SendEMail是我执行的一个操作(之前写的发送邮件的代码).后来他和我说他用别的办法解决的

            Thread th = new Thread(SendEMail);
            th.Start();
    

    我彻底泪奔啦。我咋没想到呢!

    额收拾东西 回家啦!

  • 相关阅读:
    PowerShell(0)Windows PowerShell交互界面
    WIN8的特性
    利用笔记本的WiFi做AP共享网络
    MD5和SHA加密测试
    WMI操作示例
    购买Microsoft Technet订阅,免费获得微软几乎所有的产品序列号“用于评估”,
    une petite bébé
    为ESX5主机配置多路径共享存储(以MD3000I为例)
    获取网卡信息
    CISCO交换机端口回环的处理方法备忘
  • 原文地址:https://www.cnblogs.com/ranlin/p/2132695.html
Copyright © 2011-2022 走看看