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=

  • 相关阅读:
    modals-methods 模态框 使用说明文档
    jquery validate form 异步提交
    log在线生成器 html中如何设置浏览器中标题前的logo
    解决django关于图片无法显示的问题
    Git远程操作
    Git基本操作
    Git思维导图
    连接GitHub的方法
    Git的三种区域
    Gentoo(贱兔)Linux安装笔记
  • 原文地址:https://www.cnblogs.com/qwqwQAQ/p/8484426.html
Copyright © 2011-2022 走看看