zoukankan      html  css  js  c++  java
  • 关于InvokeMethod Activity的异步调用

    讨论地址:http://www.cnblogs.com/foundation/archive/2009/12/17/1626617.html

    结论是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
  • 相关阅读:
    R 误差自相关与DW检验
    R WLS矫正方差非齐《回归分析与线性统计模型》page115
    R 再也不用愁变量太多跑回归太麻烦!R语言循环常用方法总结
    R 读取回归模型的信息
    R 创建一个空的数据框
    R 《回归分析与线性统计模型》page93.6
    自编函数
    ntpdate 正确的做法
    利用yum升级Centos6的gcc版本,使其支持C++11
    Python Shell 中敲击方向键显示「^[[C^[[D],问题解决
  • 原文地址:https://www.cnblogs.com/wdfrog/p/3955410.html
Copyright © 2011-2022 走看看