C#中的委托和事件的使用方法
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2017-09-02 12:29:39
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
下面就以一个下载过程中更新进度条的功能来说明使用方法,下载过程肯定是在多线程程中下载的,更新进度条的操作肯定是在ui线程中
下载文件线程中的设置
首先在下载文件的线程中定义一个委托和一个事件(目的是为啦设置进度条的值)如下
public delegate void setProgressBarValueEventHandler(double currentValue,double maxValue); public event setProgressBarValueEventHandler setProgressBarValueEvent;
然后在下载过程中使用下面代码来把数据传递出去,传递当前下载进度和总大小
setProgressBarValueEvent( (int)totalDownloadBytes, (int)totalBytes);
主UI线程中的设置
首先要能访问到设置进度条的那个事件 setProgressBarValueEvent 并且订阅这个事件添加一个事件句柄,线程中就会调用这个句柄函数啦
定义一个回调函数,这个函数要跟定义的委托类型参数一至如下
public void updateProcessBar(double currentValue,double maxValue) { Console.WriteLine("value:{0}",currentValue); bar.Maximum = maxValue; bar.Value = currentValue; }
然后在按钮单击事件里订阅这个事件
private void btn_download_Click(object sender, RoutedEventArgs e) { //订阅事件 AnkNet.setProgressBarValueEvent += new setProgressBarValueEventHandler(updateProcessBar); //下面是调用多线程下载文件的类 AnkNet.DownloadFile("http://sw.bos.baidu.com/sw-search-sp/software/1c5131aea1842/ChromeStandalone_56.0.2924.87_Setup.exe", "d:/a.exe"); }