需求是这样的:
我做了一个下载工具,当然一次可能有加入几千个任务,最大并行下载的任务数10个。
我定义了一个任务类,类里在启动一个线程(以后可能有多线程),然后定义了一个事件名为ProgressChanged用来通知调用者下载进度。
我针对每一个下载任务new了一个任务类进行下载,但现在的问题是ProgressChanged事件可以被调用者订阅,但如果订阅有执行代码阻塞会导致下载线程阻塞,影响下载效率。
能否在下载线程里激发一个异步事件,下载线程不用等待调用者处理ProgressChanged事件完成就去执行后续代码?
我现在线程里事件是这样写的,有人说是异步事件,但测试中发现不是:
public event EventHandler ProgressChanged; private void DownloadProc() { 。。。 。。。 do { bytesRead = remoteStream.Read(buffer, 0, buffer.Length); localStream.Write(buffer, 0, bytesRead); this.Config.BytesDownload += bytesRead; delegateArray = this.ProgressChanged.GetInvocationList(); foreach (EventHandler dele in delegateArray) { dele.BeginInvoke(this, EventArgs.Empty, null, null); } } while (bytesRead > 0); 。。。 。。。 }