委托异步返回值
1:如何新起线程
新起一个线程的方法,可以使用Thread,BackgroundWorker ,ThreadPool,控件.BeginInvoke,委托.BeginInvoke,Timer。
2:异步调用返回值
上码:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace AsyTest { internal delegate string ArchiveEventHandle(string sender, string path); public class AsyncMethod { /// <summary> /// 异步返回值 /// </summary> private string returnFlag = string.Empty; /// <summary> /// 文档函数 /// </summary> /// <param name="sender"></param> /// <param name="path"></param> /// <returns></returns> public string ArchiveFoo(string sender, string path) { //1、判断文件路径是否存在该文件 byte[] bytes = File.ReadAllBytes(path); if (bytes.Length == 0) { Console.WriteLine("file not exist"); return "file not exist"; } //2、调用证据处理接口 Console.WriteLine("1、file exist"); returnFlag = "返回值:file exist"; return "file exist"; } /// <summary> /// 文档函数 /// </summary> /// <param name="sender"></param> /// <param name="path"></param> /// <returns></returns> public string ArchiveFoo2(string sender, string path) { //Thread.Sleep(3000); //1、判断文件路径是否存在该文件 byte[] bytes = File.ReadAllBytes(path); if (bytes.Length == 0) { Console.WriteLine("file not exist"); return "file not exist"; } //2、调用证据处理接口 Console.WriteLine("1、file exist"); returnFlag = "返回值:file exist"; return "file exist"; } /// <summary> /// 回调函数 /// </summary> /// <param name="ar"></param> public void ArchiveCallBack(IAsyncResult ar) { CallBack(); ArchiveEventHandle archiveEventHandle = (ArchiveEventHandle)ar.AsyncState; string rel = archiveEventHandle.EndInvoke(ar); Console.WriteLine("EndInvoke:" + ar.IsCompleted); //证据平台函数 } /// <summary> /// 回调函数 /// </summary> /// <returns></returns> public string CallBack() { Console.WriteLine("2、callBack"); return ""; } /// <summary> /// 异步函数-无返回值 /// </summary> /// <param name="sender"></param> /// <param name="path"></param> public string ArchiveAsync(string sender, string path) { ArchiveEventHandle archiveEventHandle = new ArchiveEventHandle(ArchiveFoo); AsyncCallback callback = new AsyncCallback(this.ArchiveCallBack); archiveEventHandle.BeginInvoke(sender, path, callback, archiveEventHandle); return returnFlag; } /// <summary> /// 异步函数2-返回值 /// </summary> /// <param name="sender"></param> /// <param name="path"></param> public string ArchiveAsync2(string sender, string path) { ArchiveEventHandle archiveEventHandle = new ArchiveEventHandle(ArchiveFoo2); AsyncCallback callback = new AsyncCallback(this.ArchiveCallBack); IAsyncResult result = archiveEventHandle.BeginInvoke(sender, path, callback, archiveEventHandle); WaitHandle waitHandle = result.AsyncWaitHandle; waitHandle.WaitOne(); //Console.WriteLine(result.IsCompleted);//确定异步调用何时完成 return returnFlag; } } }
3、测试结果
3.1、无返回值
3.1、有返回值
3.3、program代码
static void Main(string[] args) { AsyncMethod asy=new AsyncMethod(); string f =asy.ArchiveAsync2("abc@sina.com", @"C:\Users\Administrator\Desktop\HR-003请假单.doc"); Console.WriteLine(f); Console.ReadLine(); }
作者:PEPE
出处:http://pepe.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库