异步委托实际上是利用 线程池 进行的,然而线程池使用的都是后台线程,所以在异步委托中,主线程一但结束,其它未完成的异步调用也会立即中断。这样理解应该没问题了吧,请精通的人来回答

解决方案 »

  1.   

    delegate void mydelegate();
            private void button1_Click(object sender, EventArgs e)
            {
                AsyncCallback mycallback = new AsyncCallback(tellyou);
                mydelegate mdg = new mydelegate(move);
                mdg.BeginInvoke(mycallback, null);
                Application.Exit();
            }        public void move()
            {
               for(int i=0;i<5;i++){
                MessageBox.Show("异步任务执行");
                Thread.Sleep(5);
               }        }        public void tellyou(IAsyncResult result)
            {
                MessageBox.Show("异步任务完成");
            } 
    WinForm程序异步中断
      

  2.   

    我刚才看了上面的程序改了一下,好像就是主线程一退出,异步调用也就自动结束了!!
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    using System.Collections;
    using System.Threading;
    using System.IO;
    using System.Runtime.InteropServices;
    namespace k
    {
    public class kw
    {

    public static void Main(string [] args)
    {
        kw objKw = new kw();
        Console.WriteLine("begin……");
        objKw.smork();
        Console.WriteLine("end……");
                Thread.Sleep(2000); //如果这里没有这句,程序不会显示异步调用结果

    }
    delegate void mydelegate();
            private void smork()
            {
                AsyncCallback mycallback = new AsyncCallback(tellyou);
                mydelegate mdg = new mydelegate(move);
                mdg.BeginInvoke(mycallback, null);
        //mdg.EndInvoke(null);
            }        public void move()
            {
               for(int i=0;i<5;i++){
               Console.WriteLine("异步任务执行");
                Thread.Sleep(5);
               }        }        public void tellyou(IAsyncResult result)
            {
                Console.WriteLine("异步任务完成");
            } } }