首页 新闻 会员 周边

c#中如何进行异步事件触发?

0
悬赏园豆:10 [已关闭问题] 关闭于 2013-11-13 11:14

需求是这样的:

我做了一个下载工具,当然一次可能有加入几千个任务,最大并行下载的任务数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);    
      。。。   
      。。。   

}
空明流光的主页 空明流光 | 初学一级 | 园豆:106
提问于:2013-11-13 11:02
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册