博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于InvokeMethod Activity的异步调用
阅读量:4703 次
发布时间:2019-06-10

本文共 2484 字,大约阅读时间需要 8 分钟。

讨论地址:

结论是IsCompleted的设置被忽略,看代码里注释

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace DelayAndThreadWorkflow{    public class myAsyncResult : IAsyncResult    {        public object AsyncState        {             get;  set;        }        public System.Threading.WaitHandle AsyncWaitHandle        {             get;  set;        }        public bool CompletedSynchronously        {            get;            set;        }        public bool IsCompleted        {            get;            set;        }        public myAsyncResult()        {            IsCompleted = false;            CompletedSynchronously = false;        }    }    public class threadMethod    {        AsyncCallback callback;        IAsyncResult asyncResult;        int n;        int result;        public void myCall(int n)        {            for (int i = 1; i <= n; i++)            {                result = result + i;            }            System.Console.WriteLine("myCall,result:{0}", result);        }        #region        /*          1。如果myAsyncResult.CompletedSynchronously=true指示是同步完成的方法         * 那么WFRuntime就没必要判断myAsyncResult.IsCompleted,会在完成BeginmyCall后马上掉用         * EndmyCall方法          2。如果myAsyncResult.CompletedSynchronously=fasle         * 那么WFRuntime只会根据会在activity回调callback时调用EndmyCall,同样忽略IsCompleted的设置         */        #endregion        public IAsyncResult BeginmyCall(int n, AsyncCallback callback, object asyncState)        {            System.Console.WriteLine("BeginmyCall,n:{0}", n);            this.n = n;            this.callback = callback;            this.asyncResult = new myAsyncResult() { AsyncState = asyncState,IsCompleted=false };            System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(myProcessThread));            thread.Start();                        return this.asyncResult;        }        public void EndmyCall(IAsyncResult r)        {            Console.WriteLine("EndmyCall,result:{0}", result);        }        public void myProcessThread()        {            Console.WriteLine("myProcessThread");            for (int i = 1; i <= n; i++)            {                result = result + i;                System.Console.WriteLine(i);                System.Threading.Thread.Sleep(500);            }            //(asyncResult as myAsyncResult).IsCompleted = true;            callback(asyncResult);        }    }}
View Code

 

转载于:https://www.cnblogs.com/wdfrog/p/3955410.html

你可能感兴趣的文章
httpclient设置proxy与proxyselector
查看>>
IT常用单词
查看>>
拓扑排序
查看>>
NYOJ--32--SEARCH--组合数
查看>>
JMS
查看>>
gulpfile 压缩模板
查看>>
【34.14%】【BZOJ 3110】 [Zjoi2013]K大数查询
查看>>
【 henuacm2016级暑期训练-动态规划专题 A 】Cards
查看>>
第五篇:白话tornado源码之褪去模板的外衣
查看>>
设备常用框架framework
查看>>
bootstrap模态框和select2合用时input无法获取焦点(转)
查看>>
MockObject
查看>>
BZOJ4516: [Sdoi2016]生成魔咒(后缀自动机)
查看>>
查看手机已经记住的WIFI密码
查看>>
最新版IntelliJ IDEA2019 破解教程(2019.08.07-情人节更新)
查看>>
C# 两个datatable中的数据快速比较返回交集或差集
查看>>
关于oracle样例数据库emp、dept、salgrade的mysql脚本复杂查询分析
查看>>
adb shell am 的用法
查看>>
iOS10 UI教程视图和子视图的可见性
查看>>
FindChildControl与FindComponent
查看>>