static void Demo2() { var d = new IsPrimeSlowDelegate(IsPrimeSlow); //定义回调函数的委托 var callback = new AsyncCallback(CallBack); //使用回调函数 d.BeginInvoke(1190494759, callback, null); Console.WriteLine("主线程现在可以做其它事"); Console.ReadKey(); }
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(); }
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(); }
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); } }