我不完全了解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,该应用程序有一个线程,即主线程?
答案 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?