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); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义