STATHREAD和主线程

时间:2013-06-05 21:36:01

标签: vb.net

我不完全了解STATHREAD属性的作用http://msdn.microsoft.com/en-us/library/system.stathreadattribute.aspx。请参阅以下代码:

Imports Project1
Imports System.Threading

Public Class Form1

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim t1 As New Thread(AddressOf PersonTest.Test2)
        Dim t2 As New Thread(AddressOf PersonTest.Test2)
        Dim t3 As New Thread(AddressOf PersonTest.Test2)
        t1.Name = "Test1"
        t2.Name = "Test2"
        t3.Name = "Test3"
        t1.Start()
        t2.Start()
        t3.Start()
    End Sub

End Class

代码显式创建了三个线程,因此总共有四个线程,即主线程t1,t2和t3。

Windows窗体应用程序是否需要STATHREAD,该应用程序有一个线程,即主线程?

1 个答案:

答案 0 :(得分:2)

STAThread用于主UI线程。

在Windows中,单线程单元(STA)暗示(简单来说)Windows消息泵将协作管理UI。

该属性告诉应用程序有效地为第一个/主UI线程创建一个STA线程。其他线程实际上与此线程并行运行,并且需要确保在调用UI组件时,它们通过STA中的消息泵将它们作为消息传递。

现在很多人都会谈到这是COM要求,这是事实。这是因为COM的STA线程模型的核心是使用Windows消息泵,并且需要与许多Windows UI进行通信。

这里也有很好的答案:Why do all Winforms programs require the [STAThread] attribute?