begininvoke了的线程想立即强行终止,有啥办法啊??
现在begininvoke写在按钮里,调用数据检索和显示,是为了显示光滑,但是反复按了的话,还是会有多次填充,出现奇怪问题。

解决方案 »

  1.   

    不光是按钮里有,按钮是一个比喻。
    现在有listbox里面一大堆月份排的日期,点了以后,右边grid显示明细。数据太多我就用begininvoke在另一线程装,又能光滑反应listbox的被选中情况。
    但是如果来回狂点,很快grid里就乱了,各个日期的数据都有了。
      

  2.   

    哪位大侠能告诉我啊,希望第二次invoke的同时,强行停止第一次。。
    开始试过加flag,但是连续点之后,上一次的finally像是进不去,flag不变。。
      

  3.   

    一点想法:
    Thread t = null;
    Boolean isRunning = false;Method()
    {
        if (isRunning)
        {
            try
            {
                t.Abort();
            }
            catch { }
        }
        dataGridView1.Rows.Clear();
        
        isRunning = true;
        //后面就是用t指定你的方法然后运行了,在你的方法的最后面写上isRunning = false
    }BeginInvoke调用Method即可
      

  4.   

    但是t怎么启动呢?我现在没有用thread这个类,直接delegate绑定方法的address来呼出的。。
      

  5.   

    IAsyncResult ar=this.BeginInvoke(...方法 A...);
    ...
    void button1_Click(object sender, EventArgs e)
    {
        ar.AsyncWaitHandle.Close(); 
    }然后在方法 A里用
    try
    {
    }
    catch (ObjectDisposedException e)
    {
    }
    吃掉Close引发的ObjectDisposedException异常
      

  6.   

    IAsyncResult 关键是要用到这个.可以判断是否完成.等操作
      

  7.   

    IAsyncResult 是可以判断,但是现在是不知道如何关闭。
    刚才试了    ar.AsyncWaitHandle.Close(); 并不能光滑即时地关闭,画面上的listbox可以狂点,会有好多个新的invoke出来,我想保留最新的一个,其他的要立即停掉。