委托的几种用法
来源:互联网 发布:淘宝龙泉宝剑 编辑:程序博客网 时间:2024/05/18 02:56
应用场景:
在做winform的时候,如果进行一个较长时间的运算,界面就会呈现死机的状态,所以一般用子线程来做计算;同时又要在主界面上显示出来进度。
传统方法:
public partial class Form1 : Form { private delegate void RefreshStateDelegate(object param); private RefreshStateDelegate _dlg; public Form1() { InitializeComponent(); _dlg = new RefreshStateDelegate(RefreshState); } private void RefreshState(object state) { label1.Text = state.ToString(); } private void SomeWork() { for (int i = 0; i < 100; i++) { label1.BeginInvoke(_dlg, i); Thread.Sleep(50); } } private void button1_Click(object sender, EventArgs e) { Thread thread = new Thread(SomeWork); thread.Start(); }
使用匿名委托方法:
private void button3_Click(object sender, EventArgs e) { RefreshStateDelegate dlg = delegate (object param) { label1.Text = param.ToString(); }; Thread thread = new Thread((object x) => { for (int i = 0; i < 100; i++) { label1.BeginInvoke(_dlg, x+":"+i); Thread.Sleep(50); } }); thread.Start("匿名"); }
使用async方法:
private async void SomeWork2() { await Task.Run(() => { for(int i=0;i<100;i++) { label1.Text = i.ToString(); label1.BeginInvoke(_dlg, i); Thread.Sleep(50); } }); }
用匿名委托方法要简洁一点,但传统方法最好理解,而且声明一个_dlg也可以在多个地方被复用。只要将回传的参数里设置一个回调类型,然后在回调函数里根据类型做不同的处理即可。async还没有体会到有什么特别的好处。
阅读全文
0 0
- 委托的几种用法
- (笔记)委托的几种用法
- 整理几种委托的用法Action,Func,匿名,多播,Lambde表达式,event
- 几种委托指向函数的方式
- [C#]委托的两种用法
- 异步委托的用法
- 委托的用法
- c# 委托的用法
- 委托的基本用法
- 委托的用法
- c#委托的用法
- swift 委托的用法
- C++实现委托的几种方法(摘录)
- 简单使用委托的几种方法总结
- using的几种用法using的几种用法
- using的几种用法
- using的几种用法
- using的几种用法
- 防范最新勒索病毒--坏兔子病毒(伪造Adobe Flash Player更新)的方法
- plot 图表函数
- 大谈“云与AI”商业案例的马化腾,让外界看到了腾讯做To B业务的企图心
- VR、5G、人工智能、无人机:英特尔要借奥运会加速前沿科技的普及
- 看书的路线
- 委托的几种用法
- CSS书写
- bzoj1499 [NOI2005]瑰丽华尔兹(dp+单调队列)
- MapReduce流程及WordCount程序解析
- 深度解析 | 亚马逊137亿美元收购全食超市的战术与战略:获得全食这个大客户,构建AWS零售框架
- Redis的数据类型及操作(三):set类型
- 用区块链养鸡!众安率先将区块链应用于农业,还将分享技术干货 | GAIR 2017
- 你的手机全网通了吗?多模物联网已经来了
- activeMQ 学习笔记