栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

winform程序异步调用(IAsyncResult 接口和AsyncCallback 委托)

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

winform程序异步调用(IAsyncResult 接口和AsyncCallback 委托)

微软IAsyncResult 接口接口实现异步调用
微软官方文档:
IAsyncResult 接口:https://docs.microsoft.com/zh-cn/dotnet/api/system.iasyncresult?redirectedfrom=MSDN&view=net-6.0
AsyncCallback 委托:https://docs.microsoft.com/zh-cn/dotnet/api/system.asynccallback?view=net-6.0

IAsyncResult 接口在使用委托异步调用方法时返回 AsyncResult ,IAsyncResult; 异步调用由 BeginInvoke 的实现。
首先定义一个委托

//定义一个委托
 public delegate string AsyncMethodCaller(int callDuration);
 public void DoAsyncMethod()
 {
     TestAsync.AsyncMethodCaller asyncMethodCaller = new TestAsync.AsyncMethodCaller(TestMethod);
     //BeginInvoke实现异步调用
     IAsyncResult result = asyncMethodCaller.BeginInvoke(100, null, null);
     
     //AsyncWaitHandle 会阻塞线程,如果不处理结果,仅使用第一句和第二就代码即可。
     //如果在winform页面中不想页面卡住,可以只使用前2句。
     result.AsyncWaitHandle.WaitOne(100);
     // 获取结果
     string returnValue = asyncMethodCaller.EndInvoke(result);
     //if (result.IsCompleted)也可以先判断线程是否调用结束
         // 关闭等待的线程
         //result.AsyncWaitHandle.Close();
     // 关闭等待的线程
     result.AsyncWaitHandle.Close();
 }
       
 public string TestMethod(int callDuration)
 {
     Thread.Sleep(callDuration);
     int threadId = Thread.CurrentThread.ManagedThreadId;
     return String.Format("The call ManagedThreadId was {0}.", threadId.ToString());
 }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/908811.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号