1.主线程就是UI线程
2.worker线程就是用户线程,跟你自定义一个Thread是没什么区别的,只不过里面封装好了一些事件,方便使用
3.线程之间的关系,其实就是没有关系,并行的
虽然除了主线程之外的线程,经常都称为子线程,但是你单纯的关闭主线程,子线程是不会退出的(线程默认都是前台线程)
除非将子线程声明为后台线程,那么主线程结束,后台线程也会跟着结束

解决方案 »

  1.   

    使用java的人喜欢发明雷人的名词儿,所谓worker线程就是指在主ui线程而创建的子线程,没有什么技术含量的一个词儿让你纠结了。
      

  2.   

    我还以为是BackGroundWorker这个东东...
      

  3.   

    在 .net framework 中,比如说你遇到了“最大工作线程数”,这可能就是指“你可以使用的系统线程池”,用来给系统自身进行I/O操作的线程池相区别。总之这是一个比较随意的名词儿,就是指你自己的程序创建的子线程。
      

  4.   

    嗯,工作线程也未必是 UI 主线程发起的。它总归是指你自己的进程创建的而已。我们可以看一个例子,比如说通过 beginXXX 这样的语句你去等待系统处理底层某个消息(例如服务器监听某tcp端口消息),当异步回调被执行时,你的代码运行在系统底层发起的 I/O 线程中。此时,你应该迅速地将 bytes[] 放到自己的接收队列中,如果接收到了完整的消息则应该以工作线程异步去处理消息(如果收到了多条消息,可以同时发起多个工作线程去处理),而不应该阻塞 I/O 线程(不应该等待处理完了消息才继续下一个 beginXXX )。这里就是系统 I/O 线程“让你启动”工作线程。总之就是指你创建的子线程而已。
      

  5.   

    BackGroundWorker这个东东? 
    偶查找学习一下。
      

  6.   

    学习BackgroundWorker
    BackgroundWorker是·net里用来执行多线程任务的控件,它允许编程者在一个单独的线程上执行一些操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 始终处于停止响应状态。如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用BackgroundWorker类方便地解决问题。
      

  7.   

    直接点说就是
    Application.Run(args)作为winform程序起点,当args参数为Form 类型的变量时,此时Run所在的线程就是UI线程。winform规定对于参数args(即对这个Form类型的本身或者其内部成员)的操作必须是创建他的线程,其他线程不可以直接操作,而其他线程要操作此args必须用args.Invoke( // 这里是对UI的操作 比如修改textbox的Text)。这就是UI线程和其他线程的区别。而线程之间没有从属关系,只是winform需要线程来维持消息循环来处理队列消息,维持此消息循环的线程也叫主线程,其他的在主线程内部声明的线程就是工作线程或者子线程。
      

  8.   

    STAThread??
    不明觉厉啊···