异步委托怎么写

1.c#中异步委托怎样写//创建委托对象HttpDownloadFileDel hdf = new HttpDownloadFileDel("与委托参数一致的方法名");hdf.BeginInvoke(“方法参数”,new AsyncCallback((f) =>{ while (!f.IsCompleted) { f.AsyncWaitHandle.WaitOne(200); } //你的逻辑,操作UI控件需要调度到UI线程 。
//或者执行你的委托 。//fpd.Invoke(BasePath + "resource/" + fileName);}), "AsycState:OK"); 。
2.谁能简单明了的告诉我什么是异步,异步和委托有什么关系,还有就是using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
delegate void ZuoFanHandle();
static void Main(string[] args)
{
cZuoFan mZuoFan = new cZuoFan();
ZuoFanHandle ZuoFan = new ZuoFanHandle(mZuoFan.LaoPoZuoFan);
mZuoFan.FanShuLe += new cZuoFan.FanShuLeHandle(mZuoFan.ChiFan);
【异步委托怎么写】Console.Write("==================同步调用===================\r\n\r\n");
ZuoFan.Invoke();
Console.Write("我一直在看着老婆做饭,不用儿子叫,我也知道饭熟了\r\n\r\n");
Console.Write("==================异步调用===================\r\n\r\n");
ZuoFan.BeginInvoke(null, null);
Console.Write("老婆先去做吧,我看会电视,还可以干点别的,儿子叫我再吃饭\r\n");
Console.Read();
}
}
class cZuoFan
{
public delegate void FanShuLeHandle();
public event FanShuLeHandle FanShuLe;
public void LaoPoZuoFan()
{
Console.Write("老婆去做饭\r\n");
for (int i = 0; i <= 100; i = i + 10)
{
Console.Write(string.Format("老婆做饭完成了{0}%\r\n", i));
System.Threading.Thread.Sleep(500);
if (i == 100)
{
if (FanShuLe != null)
{
FanShuLe();
}
}
}
}
public void ChiFan()
{
Console.Write("饭熟了,儿子叫我吃饭了\r\n");
}
}
}
同步会等待结果的返回,就是 函数 调用完了,再接下去做事情,
异步 不会等待,提高CPU使用率
3.请问C#中的委托是什么直接看MSDN或网上搜的大部分说的都是比较生硬的术语,你可以通俗的理解为将一个方法作为参数传递给另一个方法!也可以理解为:现有N个参数和返回值都相同的方法,在使用的时候根据需要一个个调用太繁琐,干脆把这些方法的规律(方法参数和返回值)总结出来,定义成一个委托!然后把要执行的方法交给委托去执行!+=操作实际上就是委托链,委托一次代理了若干个方法,以后执行时,我们调用委托来执行,委托会把所代理的方法一个个再执行!
委托在.net1.0就有,到了2.0时出现了匿名方法,也就是说委托要执行某一个方法,而这个方法并没有事先定义,随用随定义,连名字都没取,所以叫匿名方法 。例:委托实例=delegate(int x,int y){return x+y;}实际就指向一个未取名的方法,而这个方法接收两个int参数,返回和 。
到了.net3以后又更进一步,匿名方法还可以简写成:委托实例=(x,y)=>x+y; 这就是传说中的Lambda表达式,其本质是匿名方法,匿名方法本质是委托!
先通俗理解后,再看文档,你会恍然大悟!委托、匿名方法、Lambda表达式的概念其实很重要,如果你不理解的话是没办法学习好LinQ的 。
这是我的理解,更多实例,你再搜吧~
4.C# Winform 多线程异步委托进度条可以使用 BackgroundWorker 类进行操作 。
写了一个demo程序可以参考一下,本例模拟从数据库获取 10000个学生的信息,用计算每个学生的总成绩和平均成绩作为耗时操作,显示进度条 。主要代码:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { BackgroundWorker worker = new BackgroundWorker(); worker.WorkerReportsProgress = true; worker.DoWork += worker_DoWork; worker.RunWorkerCompleted += worker_RunWorkerCompleted; worker.ProgressChanged += worker_ProgressChanged; worker.RunWorkerAsync(); } private void worker_ProgressChanged(object sender, e) { // 设置进度条进度 progressBar1.Value = http://www.xuexi88.com/zhishi/e.ProgressPercentage; } private void worker_RunWorkerCompleted(object sender, e) { // 取出学生信息,绑定时 DataGridView studentBindingSource.DataSource = e.Result; } private void worker_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; List students = GetStudents(); // 模拟耗时操作,计算每个学生的总分数,平均分数 for (int i = 0; i