【问题标题】:STATHREAD and main threadSTAHREAD 和主线程
【发布时间】:2017-02-17 05:38:54
【问题描述】:

我不完全理解 STTHREAD 属性的作用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?

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    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?

    【讨论】:

    • 谢谢。在单线程 VB.NET 应用程序中省略 STATHREAD 时,您能否提供示例或示例链接来说明风险?
    • 一个副作用是任何依赖于 STAThreading 模型的 GUI 控件都将无法正常运行。 .NET 组件通常是内置 Windows 组件的包装器。
    猜你喜欢
    • 1970-01-01
    • 2021-03-07
    • 2011-02-20
    • 1970-01-01
    • 2017-04-08
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多