Vb.net 主线程和主线程

Vb.net 主线程和主线程,vb.net,Vb.net,我不完全理解STATHREAD属性的作用。请参阅下面的代码: 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)

我不完全理解STATHREAD属性的作用。请参阅下面的代码:

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?

STATHREAD用于主UI线程

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

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

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


这里也有很好的答案:

谢谢。在单线程VB.NET应用程序中使用StatThread时,您是否能够提供一个示例或示例链接,以说明存在风险?一个副作用是,任何依赖StatThreading模型的GUI控件都无法正常运行。对于作为内置windows组件包装器的.NET组件,这种情况经常发生。