C#中一种回调函数用法

做一个局域网文件传输工具,界面点按钮下载文件,同时显示文件下载进度条,而下载文件流是调用的一个开源的公共类库里的一个方法,方法里不可实现进度条更新,因为是公共的,不应有侵入式代码,但为了实时更新进度条的值,也只能修改文件传输方法,由此我想到了回调函数。

点击按钮是调用文件下载方法,并给方法传入一个回调函数,下载方法里循环接收文件流数据时实时调用回调函数返回进度值,回调函数里更新界面进度条。

我是比较老旧的.NET Framework 3.5环境,通过搜索相关资料,找到了System.Action委托这个关键点,通过它可以实现想要的效果。

 

传入回调函数代码:

// 在调用公共库接收文件方法里传入一个委托(回调函数),要求返回一个decimal类型的值
client.DownloadFile(savePath, delegate(decimal progress)
{
    // Console.WriteLine("文件接收进度: " + progress + "%");
    updateUiProgress(progress + "%"); // 更新进度条
});

 

调用回调函数代码:

// 定义下载文件方法
bool DownloadFile(string filePath,  System.Action<decimal> callback)
{
    decimal progress = 0;
    // 下载文件代码略...
    while(stream.read(...))
    {
        progress += 8
        // 执行回调函数,传入进度值
        callback.Invoke(progress);
    }
}

 

posted @ 2024-05-24 23:50  jsper  阅读(38)  评论(0编辑  收藏  举报