zoukankan      html  css  js  c++  java
  • C#异步执行带有返回值和参数的方法,且获取返回值

    很多时候需要用到这些小知识点,做做笔记一起成长

    下面是需要异步执行的方法

     //获取所有的邮件
            private List<EmailModel> GetEmailOnlyCount(POP3_ClientMessageCollection pOP3Collection)
            {
                int i = 0;
                List<EmailModel> list = new List<EmailModel>();
                foreach (POP3_ClientMessage message in pOP3Collection)
                {
                    byte[] bytes = System.Text.Encoding.Default.GetBytes(message.HeaderToString());
                    Mail_Message mail_Message = Mail_Message.ParseFromByte(bytes);
                    EmailModel emailModel = new EmailModel()
                    {
                        EmailFrom = mail_Message.From.ToString(),
                        EmailDate = mail_Message.Date.ToString(),
                        EmailSubject = mail_Message.Subject.ToString(),
                    };
                    list.Add(emailModel);
        //异步线程中,改变主线程中的控件属于跨线程的调用,需要利用代理方法 textBox5.Invoke(showProcessDelegate,
    "已经读取" + (++i) + "/" + pOP3Collection.Count + "封邮件"); } return list; }

    我们需要执行以上的方法,异步中执行由于带有参数,所以我们需要代理这个方法,用一个变量来代替这一个方法,并且声明异步方法执行结束的回调方法

     private delegate List<EmailModel> GetMailDelegate(POP3_ClientMessageCollection pOP3_ClientMessage);
     private GetMailDelegate getMailDelegate = new GetMailDelegate(GetEmailOnlyCount);
    private AsyncCallback asyncCallback;//执行完的回调方法,异步方法执行完后执行的方法

    接着我们在需要执行此方法的地方,开始异步执行此方法,当然是利用代理方法执行

    getMailDelegate.BeginInvoke(pOP3_ClientMessageCollection, asyncCallback, null);

    等异步方法执行完之后我们需要在回调方法之中结束异步操作所以我们需要在asynCallBack之中进行操作

    这里我们就是获取异步执行的方法的返回值的地方

    asyncCallback = delegate (IAsyncResult result)
                {
                    EmaliList = getMailDelegate.EndInvoke(result);//关闭异步,并且获取到方法的返回值
                    for (int i = EmaliList.Count; i > 0; i--)
                    {
                        ListViewItem listViewItem = new ListViewItem();
                        listViewItem.Text = EmaliList[i - 1].EmailFrom;
                        listViewItem.SubItems.Add(EmaliList[i - 1].EmailSubject);
                        listViewItem.SubItems.Add(EmaliList[i - 1].EmailDate);
                        listViewItem.SubItems.Add(EmaliList[i - 1].AttchmentsCount.ToString());
                        listView1.Invoke(showListViewDelegate, listViewItem);
                    }
    
                };

    好了,这里我们的邮箱的异步读取邮件的操作就基本完成了=v=

  • 相关阅读:
    0001 工作业务问题_滞纳金公式计算区别实例
    001 win10下安装linux子系统--Ubuntu及其图形界面
    Java知识系统回顾整理01基础07类和对象01引用
    Java知识系统回顾整理01基础06数组07数组工具类Arrays
    Java知识系统回顾整理01基础06数组06二维数组
    Vue 框架中添加百度地图组件
    VUE中使用vue.nextTick 报this.nextTick is not a function错误
    VUE 饿了么项目实战 VUE &quot;TypeError: Cannot read property 'deliveryPrice' of undefined&quot;报错
    VUE vue2.0配置webpack.dev.conf.js加载本地json数据
    VUE response.json() 的更新问题
  • 原文地址:https://www.cnblogs.com/qwqwQAQ/p/8484426.html
Copyright © 2011-2022 走看看