BeginInvoke应该在线程内调用。
执行BeginInvoke的线程应该是主线程,
而在你的程序里,是thread1在执行BeginInvoke
当然无法进行。
若有一个窗体,应该是form1.BeginInvoke才会有效。
我可能说得不明白,明白一点说,就是form1和消费线程放在不同的类里,区分出来就行了

解决方案 »

  1.   

    BeginInvoke应该在线程内调用。
    执行BeginInvoke的线程应该是主线程,
    而在你的程序里,是thread1在执行BeginInvoke
    当然无法进行。
    若有一个窗体,应该是form1.BeginInvoke才会有效。
    我可能说得不明白,明白一点说,就是form1和消费线程放在不同的类里,区分出来就行了
      

  2.   

    你的代码主要意思我没瞧明白,你想做什么原来是怎么做后来是怎么做的呢?“在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级”这是线程安全里的一个线程同步安全,因为另一个线程的执行速度、结束时间都是无可预知的,所以它不能做为其它某个线路上的控件的父级,比如线程A 产生的一个按钮要设线程B 产生的一个groupbox 为它的父级就是根本不成立的,因为groupbox 可能比按钮要晚执行
      

  3.   

    你的代码主要意思我没瞧明白,你想做什么原来是怎么做后来是怎么做的呢?“在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级”这是线程安全里的一个线程同步安全,因为另一个线程的执行速度、结束时间都是无可预知的,所以它不能做为其它某个线路上的控件的父级,比如线程A 产生的一个按钮要设线程B 产生的一个groupbox 为它的父级就是根本不成立的,因为groupbox 可能比按钮要晚执行
      

  4.   

    消费线程执行的过程不可以是form1中的过程吗?
      

  5.   

    可以这样解决
    class1
    private void ButtonClick();
    {
    thread1=new Thread(new ThreadStart(Class2.MRun));
    thread1.IsBackground=true;
    thread1.Start();
    }class2
     class3 c3=new class3();
    private void MRun()
    {
    MethodInvoker mi1 = new MethodInvoker(c3.method);
    BeginInvoke(mi1)
    }
    class3
     //这里放你的主线程