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 ...
随机推荐
- fabric Clone
记录下: var newObj = fabric.util.object.clone(obj); decDoc.dropCanvas.add(newObj., top: }));
- mysql sp 练习游标和预编译
create procedure Jack_count_cur_dual() BEGIN ); ; DECLARE mycur CURSOR for SELECT table_name FROM tt ...
- DES加密与解密MD5加密帮助类
public class TrialHelper { //默认密钥向量 private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xA ...
- Nginx开发HTTP模块入门
Nginx开发HTTP模块入门 我们以一个最简单的Hello World模块为例,学习Nginx的模块编写.假设我们的模块在nginx配置文件中的指令名称为hello_world,那我们就可以在ngi ...
- Apple开启双重认证过程
1.准备 1.1 AppleID账号.密码 1.2 打算用于接收开启双重认证的十一位手机号 1.3 AppleID账号密保问题 2.操作步骤: 2.1 打开设置 2.2 点击个人账户头像 注意:当前有 ...
- (原创)数据结构之利用KMP算法解决串的模式匹配问题
给定一个主串S(长度<=10^6)和一个模式T(长度<=10^5),要求在主串S中找出与模式T相匹配的子串,返回相匹配的子串中的第一个字符在主串S中出现的位置. 输入格式: 输入有两行 ...
- xtrabackup使用
转自:https://www.cnblogs.com/waynechou/p/xtrabackup_backup.html 阅读目录 xtrabackup 选项 xtrabackup 全量备份恢复 x ...
- django中ModelForm解决多表单组合显示问题
一.多表单组合显示问题 在项目中用ModelForm生成页面时 当有多表单组合显示时,会显示全部的关联表单数据. 而在实际项目中可能会出现只想让用户选择部分数据,这时候这样的显示就有问题. 二.问题解 ...
- 文件操作 - 整体操作&文件搜索
文件操作 - 整体操作 1.touch 作用:创建普通文件 格式:touch file1 [file2] 2.cp 作用:拷贝文件 格式:cp 源文件 目标文件 3.rm 作用:删除文件 格式:rm ...
- apache ab性能测试实践
E:\developtools\apache ab\httpd-2.4.25-x86-vc14-r1\Apache24\bin>ab -n 15000 -c 600 "http://1 ...