1.不能
2.同上
3.见4
4.Abort()会抛出异常,一般情况下CLR会吞掉这个异常,因此一般情况下能让线程过程自行结束就不要使用Abort()。使用这个方法表示你的多线程设计功力不足。
5.不是,看具体需求。另外面向对象与面向过程这种术语一般只在讨论语言差异时出现,而不会说一个概念(比如线程)是不是面向对象/面向过程的。

解决方案 »

  1.   


    我要实现一个功能就是 外部按键触发 然后线程里执行。
    你看我这样处理对不对,
    step1:程序启动,开启线程,
    step2:线程里循环查询 开关量,为真则执行,否则 继续循环查询
      

  2.   

    2.子线程一般是用于执行某个方法的,等到方法执行完毕(return返回),就会被终止,垃圾回收机制会退出线程。
    5.线程可以在程序(一般叫主线程)的任何地方启动,通过new Thread或者继承重写Thread类实现。
      

  3.   

    1.不能
    会报错,线程正在运行或已经终止,不能重新启动
    想重新运行,需要重新new
      

  4.   


    我要实现一个功能就是 外部按键触发 然后线程里执行。
    你看我这样处理对不对,
    step1:程序启动,开启线程,
    step2:线程里循环查询 开关量,为真则执行,否则 继续循环查询
    不好。应该在“开关量”被修改时再创建并启动线程。如果可能的话,“开关量”也不需要。
      

  5.   


    把子线程查询改为   由主线程监听外部按键事件,然后开启线程执行处理。
    把子线程查询改为   由主线程监听外部按键事件,然后开启线程执行处理这个怎么做?我不懂 能不能说具体点?
            private void btn_DCYF_Click(object sender, EventArgs e) //监听事件
            {
      
               for (int i = 0; i < 1; i++)
                 {
                   Thread t = new Thread(AutoDCYF);
                   t.SetApartmentState(ApartmentState.STA); //在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式
                   t.Start(i);
                   lock (this)
                   {
                       rtb_log.Text = rtb_log.Text + "\n启动【"+i+"】子线程。";
                   }
                   //GC.Collect();
                 }        }
      

  6.   


    你这个方法不错,不过我很好奇,就是当之前那个线程还没有结束时,我又创建一个同名线程并进入,会有什么后结呢?
    线程的名称就类似于handle,是一个引用类型,只是用来操作线程的,跟线程本身没什么关系
    不要说你点了一次,执行完click,动态创建的线程名称就已经被回收掉了
    即使你在button里用同一个变量new了很多次,也只是每一次指向不同的线程对象而已