none
c# winform 多线程 RRS feed

  • 问题

  • Windows 窗体”使用单线程单元 (STA) 模型,设置成了单线程单元.就算你创建了多个线程.他也只能进入一个线程.,那意思是说,Windows 窗体使用不了多线程吗?
    2009年5月22日 8:35

答案

  • 你好!
         这里的确容易造成一定的误解,我详细说明一下,希望对你有帮助:
    .NET支持两种线程模型:STA和MTA。

    STA(single threaded apartments)。
    MTA(multi threaded apartments)。

    先说说什么是apartment:
    apartment只是一个逻辑上的概念,它可以包含一个或多个线程。 一个AppDomain可以包括一个或多个apartment。
    STA是指该apartment中只能包含一个thread。
    MTA指该apartment中可以包含多个thread。
    STA and MTA 之间最大的区别就是MTA 可以在同一个apartment 中使用所有的共享资源并发执行多个线程。 而多个STA虽然可以共享数据,但是不能并发执行线程( 跨apartment调用组件实例必须要进行调度),存在性能问题。

    当创建一个新的STA线程时,CLR会在该AppDomain中创建一个apartment和thread(从属于该apartment)。如果是创建 MTA线程,则会CLR会检查该AppDomain是否存在一个存放MTA的apartment,如果存直接创建线程到该MTA的apartment中,否则就创建一个 MTA的apartment和thread(从属于该apartment)。

    一个进程可以包含多个STA,但只能有一个MTA。MTA中各线程可以并行的调用本apartment内实例化的组件,而不需要进行调度。跨apartment调用组件实例必须要进行调度。(除非使用了自由线程调度器)

    说了很多,不理解关系也不大,这两个都是COM里的概念,很你现在编写的代码关系不大,如果想深入了解,可以学习一下COM的相关知识!
    周雪峰
    2009年5月22日 9:03
    版主

全部回复

  • 能使用,你需要自己在代码中创建和维护你的线程
    知识改变命运,奋斗成就人生!
    2009年5月22日 8:37
    版主
  • 这句话应该是这个意思吧:不能同时在多个线程上操作窗体;

    这句话是哪来的呢?
    2009年5月22日 8:40
  • 你好!
         这里的确容易造成一定的误解,我详细说明一下,希望对你有帮助:
    .NET支持两种线程模型:STA和MTA。

    STA(single threaded apartments)。
    MTA(multi threaded apartments)。

    先说说什么是apartment:
    apartment只是一个逻辑上的概念,它可以包含一个或多个线程。 一个AppDomain可以包括一个或多个apartment。
    STA是指该apartment中只能包含一个thread。
    MTA指该apartment中可以包含多个thread。
    STA and MTA 之间最大的区别就是MTA 可以在同一个apartment 中使用所有的共享资源并发执行多个线程。 而多个STA虽然可以共享数据,但是不能并发执行线程( 跨apartment调用组件实例必须要进行调度),存在性能问题。

    当创建一个新的STA线程时,CLR会在该AppDomain中创建一个apartment和thread(从属于该apartment)。如果是创建 MTA线程,则会CLR会检查该AppDomain是否存在一个存放MTA的apartment,如果存直接创建线程到该MTA的apartment中,否则就创建一个 MTA的apartment和thread(从属于该apartment)。

    一个进程可以包含多个STA,但只能有一个MTA。MTA中各线程可以并行的调用本apartment内实例化的组件,而不需要进行调度。跨apartment调用组件实例必须要进行调度。(除非使用了自由线程调度器)

    说了很多,不理解关系也不大,这两个都是COM里的概念,很你现在编写的代码关系不大,如果想深入了解,可以学习一下COM的相关知识!
    周雪峰
    2009年5月22日 9:03
    版主
  • 谢谢版主了,我在看看资料,在了解一下。

    2009年5月25日 0:56
  • 不客气啊!
    欢迎常常来这里和大家交流啊!
    周雪峰
    2009年5月25日 0:58
    版主