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); } }