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
  • 相关阅读:
    error PRJ0019的一个解决心得
    3月3日工作日志88250
    IBM、BEA和JBoss应用服务器采用OSGi
    四级再次挂了
    迁移应用进入基于Annotation MVC的spring 2.5
    如何在VC6.0中设置条件断点
    3月4日工作日志88250
    KMP字符串模式匹配详解
    KMP字符串模式匹配详解
    C/C++之SQLite常用函数
  • 原文地址:https://www.cnblogs.com/wdfrog/p/3955410.html
Copyright © 2011-2022 走看看