3

我不完全理解 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 窗体应用程序是否需要 STTHREAD?

4

1 回答 1

2

STAThread 用于主 UI 线程。

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

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

现在很多人会说它是 COM 要求,这是真的。这是因为在其核心,COM 的 STA 线程模型使用 Windows 消息泵,并且是与许多 Windows UI 通信所必需的。

这里也有很好的答案:为什么所有 Winforms 程序都需要 [STAThread] 属性?

于 2013-06-05T21:48:06.743 回答