BeginInvoke入门

BeginInvoke入门用于方法类的异步调用。与普通调用的区别:普通方法的调用是主线程运行。比如delay_us(1000);主线程会等待该方法运行完再执行下一个方法。BeginInvoke是用其他线程去运行方法。就像让秘书去工作,自己的工作不会受影响。既然是方法的异步调用,那就要先声明一个方法。//AsyncCallbackFunc<double,double,double,string>cnc=(X,Y,Z)=>{…

大家好,欢迎来到IT知识分享网。BeginInvoke入门"

用于  方法类  的异步调用。

与普通调用的区别:普通方法的调用是主线程运行。比如delay_us(1000);主线程会等待该方法运行完再执行下一个方法。BeginInvoke是用其他线程去运行方法。就像让秘书去工作,自己的工作不会受影响。

既然是方法的异步调用,那就要先声明一个方法。

//AsyncCallback
        Func<double, double, double, string> cnc = (X, Y, Z) =>
        {

            System.Threading.Thread.Sleep(30);
            return “完成”;
        };

//Func规定最后一个参数是返回类型。cnc方法的返回类型那就是string

//cnc参数就是X, Y, Z和前面double对应

//=>表示右边是方法体

private void button1_Click(object sender, EventArgs e)
        {

            IAsyncResult data = cnc.BeginInvoke(1.1, 2.2, 3.3, end, “执行回调”);
            //label1.Text = cnc.EndInvoke(data);
        }

//button1_Click是按键事件

//cnc.BeginInvoke要在cnc的参数基础上追加2个参数(下个回调方法名,下个回调参数),作用是这个cnc方法运行完毕后再执行的下一个方法end,他的参数是       “执行回调”     如果不需要就填null,null

//可以看成cnc(1.1, 2.2, 3.3);执行完后再运行end(“执行回调”);

private void end(IAsyncResult a)//参数必须是IAsyncResult类型
        {

            textBox1.Invoke(new Action<string>
                               (匿名方法名 => { textBox1.Text = cnc.EndInvoke(a); })
                                , a.ToString());
        }

//textBox1.Invoke用于跨线程方法

//Action<string>表示一个无返回值的方法,他的参数是string类型

//cnc.EndInvoke(a);//表示等这个方法运行完

//a.ToString();是因为Action<string>这方法的参数是string类型。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 线程3回调函数
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            IAsyncResult data = cnc.BeginInvoke(1.1, 2.2, 3.3, end, "执行回调");
            //label1.Text = cnc.EndInvoke(data);
        }
        //AsyncCallback
        Func<double, double, double, string> cnc = (X, Y, Z) =>
        {
            System.Threading.Thread.Sleep(30);
            return "完成";
        };

        private void end(IAsyncResult a)//参数必须是IAsyncResult类型
        {
            textBox1.Invoke(new Action<string>
                               (匿名方法名 => { textBox1.Text = cnc.EndInvoke(a); })
                                , a.ToString());
        }
    }
}

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15844.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信