当前位置:编程学习 > html/css >>

等待句柄判断异步委托完成

通过AsyncWatiHandle属性,访问等待句柄。WaitOne()方法阻断当前线程,直到异步调用线程完成返回可以利用的句柄以后再执行当前线程。

程序:

[html] 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading; 
 
namespace AsyncDelegate 

    class Program 
    { 
        public delegate int TakeSomeTimeDelegate(int data,int ms); 
 
        static void Main(string[] args) 
        { 
            TakeSomeTimeDelegate dl=TakeSomeTime; 
            IAsyncResult ar=dl.BeginInvoke(1,200,null,null); 
 
            while (true) 
            { 
                Console.WriteLine("."); 
                Console.WriteLine("Run in thread:" + Thread.CurrentThread.ManagedThreadId); 
                if (ar.AsyncWaitHandle.WaitOne(100, false)) 
                { 
                    Console.WriteLine("Can get the result now"); 
                    break; 
                } 
            } 
 
            //while (!ar.IsCompleted) 
            //{ 
            //    Console.WriteLine("."); 
            //    Console.WriteLine("Run in thread:" + Thread.CurrentThread.ManagedThreadId); 
            //    Thread.Sleep(50); 
            //} 
 
            int result = dl.EndInvoke(ar); 
            Console.WriteLine("Result:{0}", result); 
        } 
 
        static int TakeSomeTime(int data, int ms) 
        { 
            Console.WriteLine("TakeSomeTime started!"); 
            Console.WriteLine("Run in thread:"+Thread.CurrentThread.ManagedThreadId); 
            Thread.Sleep(ms); 
            Console.WriteLine("TakeSomeTime Completed!"); 
            return ++data; 
        } 
    } 

[html] 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading; 
 
namespace AsyncDelegate 

    class Program 
    { 
        public delegate int TakeSomeTimeDelegate(int data,int ms); 
 
        static void Main(string[] args) 
        { 
            TakeSomeTimeDelegate dl=TakeSomeTime; 
            IAsyncResult ar=dl.BeginInvoke(1,200,null,null); 
 
            while (true) 
            { 
                Console.WriteLine("."); 
                Console.WriteLine("Run in thread:" + Thread.CurrentThread.ManagedThreadId); 
                if (ar.AsyncWaitHandle.WaitOne(100, false)) 
                { 
                    Console.WriteLine("Can get the result now"); 
                    break; 
                } 
            } 
 
            //while (!ar.IsCompleted) 
            //{ 
            //    Console.WriteLine("."); 
            //    Console.WriteLine("Run in thread:" + Thread.CurrentThread.ManagedThreadId); 
            //    Thread.Sleep(50); 
            //} 
 
            int result = dl.EndInvoke(ar); 
            Console.WriteLine("Result:{0}", result); 
        } 
 
        static int TakeSomeTime(int data, int ms) 
        { 
            Console.WriteLine("TakeSomeTime started!"); 
            Console.WriteLine("Run in thread:"+Thread.CurrentThread.ManagedThreadId); 
            Thread.Sleep(ms); 
            Console.WriteLine("TakeSomeTime Com

补充:web前端 , HTML 5 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,