
Delegate利用委托,将方法作参数传值,并且接收返回值,我该怎么写
2019-03-12 17:01:43
微信公开课小程序热门讨论「Delegate利用委托,将方法作参数传值,并且接收返回值,我该怎么写」最新回复-不用把委托传进去,委托本身就是一个类,你在类中定义委托后,把方法赋给委托,然后在CallFuncThread方法中调用委托就行了大致如下publicdelegatevoidDelegate;Delegatedelegate=methodName;publicstaticboolCallFuncThread(TimeSpantimeSpan){//一些操作完成后,开始调用委托中的方法delegate;}
internalclassProgram{publicstaticvoidMain(string[]args){intiOverTime=10000;//int.Parse(iniFile.GetString(CATCH,OVERTIME,));//读取超时时间,默认10秒=100000boolbValue=OverTimeCntrol.CallFuncThread(GetArticlePageContent,TimeSpan.FromMilliseconds(iOverTime),null,newobject[]{0,bbb});Console.ReadKey(true);}publicstaticboolGetArticlePageContent(paramsobject[]args){Thread.Sleep(1000);returntrue;}}publicclassOverTimeCntrol{//记录返回值publicstaticobjectReturnVal{get;privateset;}publicdelegateboolDelegate(object[]args);//修改委托,使之可以传入参数///summary///执行指定的方法,如果在指定的时间之内没有完成,则中止////summary///paramname=func任务过程/param///paramname=timeSpan超时时间/param///paramname=timeoutCallback如果超时,则调用该方法/param///paramname=args任务过程所需参数/param///returns是否正确执行完毕/returnspublicstaticboolCallFuncThread(Delegatefunc,TimeSpantimeSpan,ActiontimeoutCallback,paramsobject[]args){ReturnVal=null;//清空返回值。if(func==null)thrownewArgumentNullException(func);ManualResetEventresetEvent=newManualResetEvent(false);ManualResetEventwaitThreadEvent=newManualResetEvent(false);Exceptionerror=null;Threadthread=null;//将任务加到线程当中ThreadPool.QueueUserWorkItem(delegate{thread=Thread.CurrentThread;try{ReturnVal=func(args);}catch(ThreadAbortException){}catch(Exceptionex){error=ex;}resetEvent.Set();waitThreadEvent.WaitOne();//每次线程执行结束都等待后续的处理逻辑});try{boolresult=resetEvent.WaitOne(timeSpan,false);//等待任务的结束if(error!=null)//说明在执行过程中出现异常,直接抛出异常throwerror;if(!result){if(thread!=null){thread.Abort();//此时可以确保该线程没有开始运行新的任务waitThreadEvent.Set();}if(timeoutCallback!=null)timeoutCallback();}returnresult;}finally{waitThreadEvent.Set();//最后确保释放线程池线程}}} 更多有关「Delegate利用委托,将方法作参数传值,并且接收返回值,我该怎么写」的疑问请扫码关注微信公开课+小程序!
internalclassProgram{publicstaticvoidMain(string[]args){intiOverTime=10000;//int.Parse(iniFile.GetString(CATCH,OVERTIME,));//读取超时时间,默认10秒=100000boolbValue=OverTimeCntrol.CallFuncThread(GetArticlePageContent,TimeSpan.FromMilliseconds(iOverTime),null,newobject[]{0,bbb});Console.ReadKey(true);}publicstaticboolGetArticlePageContent(paramsobject[]args){Thread.Sleep(1000);returntrue;}}publicclassOverTimeCntrol{//记录返回值publicstaticobjectReturnVal{get;privateset;}publicdelegateboolDelegate(object[]args);//修改委托,使之可以传入参数///summary///执行指定的方法,如果在指定的时间之内没有完成,则中止////summary///paramname=func任务过程/param///paramname=timeSpan超时时间/param///paramname=timeoutCallback如果超时,则调用该方法/param///paramname=args任务过程所需参数/param///returns是否正确执行完毕/returnspublicstaticboolCallFuncThread(Delegatefunc,TimeSpantimeSpan,ActiontimeoutCallback,paramsobject[]args){ReturnVal=null;//清空返回值。if(func==null)thrownewArgumentNullException(func);ManualResetEventresetEvent=newManualResetEvent(false);ManualResetEventwaitThreadEvent=newManualResetEvent(false);Exceptionerror=null;Threadthread=null;//将任务加到线程当中ThreadPool.QueueUserWorkItem(delegate{thread=Thread.CurrentThread;try{ReturnVal=func(args);}catch(ThreadAbortException){}catch(Exceptionex){error=ex;}resetEvent.Set();waitThreadEvent.WaitOne();//每次线程执行结束都等待后续的处理逻辑});try{boolresult=resetEvent.WaitOne(timeSpan,false);//等待任务的结束if(error!=null)//说明在执行过程中出现异常,直接抛出异常throwerror;if(!result){if(thread!=null){thread.Abort();//此时可以确保该线程没有开始运行新的任务waitThreadEvent.Set();}if(timeoutCallback!=null)timeoutCallback();}returnresult;}finally{waitThreadEvent.Set();//最后确保释放线程池线程}}} 更多有关「Delegate利用委托,将方法作参数传值,并且接收返回值,我该怎么写」的疑问请扫码关注微信公开课+小程序!
标签:微信公开课,小程序

「Delegate利用委托,将方法作参数传值,并且接收返回值,我该怎么写」热议话题订阅
方法1:微信扫描微信公开课小程序码即可订阅热议话题「Delegate利用委托,将方法作参数传值,并且接收返回值,我该怎么写」
方法2:微信搜索微信公开课小程序名称进入,即可订阅热议话题「Delegate利用委托,将方法作参数传值,并且接收返回值,我该怎么写」
方法3:微信网页访问即速商店,长按识别微信公开课小程序码即可订阅热议话题「Delegate利用委托,将方法作参数传值,并且接收返回值,我该怎么写」
微信公开课小程序热议话题「Delegate利用委托,将方法作参数传值,并且接收返回值,我该怎么写」由微信公开课原创摘录于微信小程序商店shop.jisuapp.cn,转载请注明出处。
微信公开课热议话题「Delegate利用委托,将方法作参数传值,并且接收返回值,我该怎么写」由微信公开课开发者向微信用户提供,并对本服务内容、数据资料及其运营行为等真实性、合法性及有效性承担全部责任。
微信公开课小程序
更新时间:2019-03-12 17:01:43
>
__methodCallerx27;ofundefined
>-404011cloudfunctionexecutionerror
>,请补充选择商家自营-预付卡销售-发行方类目,并在基础信息处申请该类目,通过
>:host在模拟器中显示无效
>:请在小程序服务页面上架正式(非测试)内容或商品后重新提交审核
>.net 微信小程序 上传图片
>'setTimeout'的问题
>‘三朵里熙SPA主题减压空间’为什么搜索关键词‘三朵里‘搜不到
>‘扫普通链接二维码打开小程序‘中设置为体验版,扫码打开是线上版本
>“cloudfunctions**indexjs”gitignore
>“NO ULINK DEVICE FOUND”是怎么回事
>“万马掌上校园”的类目审核
>“上线了”公司开发的微信小程序怎么样?
>“产品是否一定需要条形码”
>