C#中的委托和事件的使用方法

来源:赵克立博客 分类: C# 标签:C#发布时间:2017-09-02 12:29:39最后更新:2017-09-02 12:29:39浏览:1563
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。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");
}



微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python