C#异步执行带有返回值和参数的方法,且获取返回值
很多时候需要用到这些小知识点,做做笔记一起成长
下面是需要异步执行的方法
//获取所有的邮件
private List<EmailModel> GetEmailOnlyCount(POP3_ClientMessageCollection pOP3Collection)
{
int i = ;
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 > ; i--)
{
ListViewItem listViewItem = new ListViewItem();
listViewItem.Text = EmaliList[i - ].EmailFrom;
listViewItem.SubItems.Add(EmaliList[i - ].EmailSubject);
listViewItem.SubItems.Add(EmaliList[i - ].EmailDate);
listViewItem.SubItems.Add(EmaliList[i - ].AttchmentsCount.ToString());
listView1.Invoke(showListViewDelegate, listViewItem);
} };
好了,这里我们的邮箱的异步读取邮件的操作就基本完成了=v=
C#异步执行带有返回值和参数的方法,且获取返回值的更多相关文章
- scala:函数作为值或参数进行传递、作为返回值进行返回
@ 目录 函数可以作为值进行传递 函数可以作为参数进行传递 函数可以作为返回值进行返回 什么是匿名函数 函数可以作为值进行传递 语法var f = 函数名 _ 如果明确了变量的数据类型,那么下划线可以 ...
- JSF页面中使用js函数回调后台bean方法并获取返回值的方法
由于primefaces在国内使用的并不是太多,因此,国内对jsf做系统.详细的介绍的资料很少,即使有一些资料,也仅仅是对国外资料的简单翻译或者是仅仅讲表面现象(皮毛而已),它们的语句甚至还是错误的, ...
- C#.NET为List加入扩展方法:获取唯一值
public static class ListTools { /// <summary> /// 获取唯一值列表 /// </summary> /// <param n ...
- 060、Java中定义有返回值有参数的方法
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- 微信小程序前端调用后台方法并获取返回值
wxml代码 <wxs src="../../wxs/string.wxs" module="tools" /> <!-- 调用tools.i ...
- asp.net 调用post方法并获取返回值
/// <summary> /// http协议 post数据 接受返回结果 /// </summary> /// <param ...
- URL跨项目调用方法,获取返回的json值,并解析
package com.mshc.util; import java.io.BufferedReader; import java.io.IOException; import java.io.Inp ...
- 返回通知 对方法返回的结果可以进行加工 例如请求接口后 返回的json参数可以加工成对象返回给调用者
- Delphi通过管道执行外部命令行程序(cmd)并获取返回结果
该代码片段来自于: http://www.sharejs.com/codes/delphi/8999,发现好多代码,想用的时候找不到,记录一下备用 function RunDosCommand(Com ...
随机推荐
- 一个数组:1,1,2,3,5,8,13,21...+m,求第30位数是多少?用递归实现;(常考!!!)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...
- WinForm中自定义搜索框(水印、清空按钮、加载中图标)
public partial class CustomSearchBar : TextBox { private readonly Label lblwaterText = new Label(); ...
- 【转】C#使用Oracle.ManagedDataAccess.dll
源地址:https://www.cnblogs.com/goldenbridge/p/7812081.html
- 在Delphi中获取和修改文件的时间
转载自 http://www.cnblogs.com/jieke/archive/2013/01/11/2855782.html 本文介绍了在Delphi中利用系统函数和Windows API函数调用 ...
- centos6.7安装tomcat
一.配置环境 安装环境: centos6.7 jdk1.8.0 tomcat8.5 1.到官网下载tomcat 二.下载安装tomcat 1.通过xsheel工具rz命令上传tomcat安装包 ...
- js appendChild与insertBefore 区别和用法
1.appendChild() 方法:可以向节点的子节点列表的末尾添加新的子节点. 比如:appendChild(newchild)括号里可以是创建的标签var newchild = docume ...
- 6A - Daydreamin
#include <iostream> #include <cstdio> using namespace std; typedef long long ll; ll dp[] ...
- php 替换 oracle 数据字段中“看不见”换行符号
工作需要,把oracle中的数据导出csv,导出代码如下:<?php$file_name = "申請書承認(予定休出).csv";header("Content-D ...
- 【转】IntelliJ IDEA下自动生成Hibernate映射文件以及实体类
1.构建项目并添加项目结构配置以及配置初始参数 1.1.如图将基本的架子搭建好 1.2.点击File,弹出的菜单中点击Project Structure: 1.3.点击左侧的Modul ...
- 开发环境,eclipse编辑器java代码自动提示
Eclipse+ADT+Android SDK 搭建安卓开发环境 eclipse编辑器java代码自动提示 window-->Preferences-->JAva-->Content ...