C# win form 程序 可以 取消委托吗?有一个form, form load 时,有一个委托,这个委托并不一定需要,(如果, 用户进入界面,不做任何操作,关闭界面,这个委托不需要全部完成).那么,在form closing 时(假设委托未完成) 可以取消委托吗?

解决方案 »

  1.   

        void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if( this.Modified )   //<--类似标志
            {
                //...
            }
        }
      

  2.   

    直接用-=
    public   static   Delegate   Invoke(Delegate   list,params   object[]   args) 

     list=Delegate.Remove(list,detachedClient); 
      return   list; 
    }
      

  3.   


    两个方法都用过了,委托还是照样执行下去,知道执行完.可以给多点提示吗?private delegate void GetData();
    private GetData getA;
    private IAsyncResult Iar; 
    frm_LoadgetA = new GetData(GetDataFunction);
    Iar = getARPO.BeginInvoke(new AsyncCallback(OnCompleteGetARPackOrder), getA);
    求frm_closing, 代码, 我要停止执行 GetDataFunction 里面的代码.private void frm_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (!Iar.IsCompleted)
        {
             //?????
        }
    }
      

  4.   

    if(...)
    {
        getA = new GetData(GetDataFunction);
    }
    这样不可以吗?
      

  5.   

    if(...)
    {
      getA = new GetData(GetDataFunction);
    }
    else
    {
        getA = ...;
    }
      

  6.   


    不行啊!GetDataFunction 还在执行.
      

  7.   

    要看你的 GetDataFunction怎么实现的,假如是一个循环(While或者for,etc)
    你可以用Event通知的方式结束执行
            AutoResetEvent cancelEvent = new AutoResetEvent(false);        void GetDataFunction(IAsyncResult are)
            {
                while(true)
                {
                    if(cancelEvent.WaitOne(0))
                    {
                        break;
                    }
                    //to do,get data function
                }
           }
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (!Iar.IsCompleted)
                {
                   cancelEvent.Set();
                }
            }
      

  8.   


    既然这样,你为什么不考虑不要在Load事件中去执行GetDataFunction,而是当用户真正需要这些数据的时候才去执行你的GetDataFunction,这样我们告知用户需要等待这个这个操作完成合情合理,逻辑上也容易接受.
      

  9.   


    这个委托处理的数据,并不一定需要啊,用户用到某些操作才需要它处理出来的数据,
    Load事件中执行,要用户等死啦....
      

  10.   


    这个委托处理的数据,并不一定需要啊,用户用到某些操作才需要它处理出来的数据,
    不在Load事件中用代理或线程执行,当需要用到时,户等会投诉加载慢...
      

  11.   

    你没仔细看我回的,我就是想让你不要再Load事件中去做这个操作.
    你既然能够知道某些操作,才需要数据,那么等你执行到某些操作之时,去拿数据就可以了.
      

  12.   


    不好意思,刚打漏两个字,
    我的意思是说:不在Load事件中用代理或线程执行,当需要用到时(某些操作用到数据时),用户会投诉加载慢,要等好长时间.