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());
 }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值