CA2232:以 STAThread 標記 Windows Form 進入點
型別名稱 |
MarkWindowsFormsEntryPointsWithStaThread |
CheckId |
CA2232 |
分類 |
Microsoft.Usage |
中斷變更 |
不中斷 |
原因
組件 (Assembly) 會參考 System.Windows.Forms 命名空間 (Namespace),且它的進入點 (Entry Point) 並未以 STAThreadAttribute 屬性 (Attribute) 標示。
規則描述
STAThreadAttribute 表示應用程式的 COM 執行緒模型為單一執行緒 Apartment。在使用 Windows Form 的任何應用程式之進入點上必須有此屬性。如果省略的話,Windows 元件就無法正常運作。若沒有該屬性,應用程式會使用 Windows Form 不支援的多執行緒 Apartment Model (Multithreaded Apartment Model)。
注意事項 |
---|
使用應用程式架構的 Visual Basic 專案,並不需要以 STAThread 標記 Main 方法。Visual Basic 編譯器會自動進行這項工作。 |
如何修正違規
若要修正此規則的違規情形,請將 STAThreadAttribute 屬性加入至進入點。如果有 MTAThreadAttribute 屬性,請加以移除。
隱藏警告的時機
如果針對 .NET Compact Framework 進行開發時,不需要而且不支援 STAThreadAttribute 屬性,則您可以放心地隱藏這項規則的警告。
範例
下列為 STAThreadAttribute 之正確使用方式的範例。
Imports System
Imports System.Windows.Forms
NameSpace UsageLibrary
Public Class MyForm
Inherits Form
Public Sub New()
Me.Text = "Hello World!"
End Sub 'New
' Satisfies rule: MarkWindowsFormsEntryPointsWithStaThread.
<STAThread()> _
Public Shared Sub Main()
Dim aform As New MyForm()
Application.Run(aform)
End Sub
End Class
End Namespace
using System;
using System.Windows.Forms;
namespace UsageLibrary
{
public class MyForm: Form
{
public MyForm()
{
this.Text = "Hello World!";
}
// Satisfies rule: MarkWindowsFormsEntryPointsWithStaThread.
[STAThread]
public static void Main()
{
MyForm aform = new MyForm();
Application.Run(aform);
}
}
}