示例#1
0
        static void Demo2()
        {
            var d = new IsPrimeSlowDelegate(IsPrimeSlow);

            //定义回调函数的委托
            var callback = new AsyncCallback(CallBack);

            //使用回调函数
            d.BeginInvoke(1190494759, callback, null);

            Console.WriteLine("主线程现在可以做其它事");
            Console.ReadKey();
        }
示例#2
0
        static void Demo1()
        {
            var d = new IsPrimeSlowDelegate(IsPrimeSlow);

            //注意这里BeginInvoke的第二个参数为null - 没有使用回调函数
            var iar = d.BeginInvoke(1190494759, null, null);

            //获得结果,比起Threading方法简单了很多
            var ret = d.EndInvoke(iar);

            Console.WriteLine(ret);
            Console.ReadKey();
        }
示例#3
0
        static void Main(string[] args)
        {
            var d = new IsPrimeSlowDelegate(IsPrimeSlow);

            //定义回调函数的委托
            var callback = new AsyncCallback(CallBack);

            //取消令牌
            var cts = new CancellationTokenSource();

            //使用回调函数和取消令牌
            d.BeginInvoke(1, cts.Token, callback, null);

            Console.WriteLine("如果要取消任务,请按下任意键。。。");

            //按下任意键之后取消任务
            Console.ReadKey();
            cts.Cancel();

            Console.ReadKey();
        }
示例#4
0
        private void btnTest_Click(object sender, EventArgs e)
        {
            //UI线程可以直接更新控件
            btnTest.Enabled   = false;
            btnCancel.Enabled = true;

            var del      = new IsPrimeSlowDelegate(IsPrimeSlow);
            var callback = new AsyncCallback(CallBack);

            int number;

            if (!int.TryParse(tbNumber.Text, out number))
            {
                UpdateControls(string.Format("输入必须为绝对值不超过{0}的整数", int.MaxValue));
            }
            else
            {
                //开始一个异步任务
                del.BeginInvoke(number, cts.Token, callback, null);
            }
        }