次の方法で共有


CA2232: Windows フォームのエントリ ポイントを STAThread に設定します

Item [値]
規則 ID CA2232
カテゴリ Microsoft.Usage
互換性に影響する変更点 なし

原因

アセンブリが System.Windows.Forms 名前空間を参照しており、そのエントリ ポイントが System.STAThreadAttribute 属性でマークされていません。

規則の説明

STAThreadAttribute は、アプリケーションの COM スレッド モデルがシングルスレッド アパートメントであることを示しています。 この属性は、Windows フォームを使用するすべてのアプリケーションのエントリ ポイントに指定する必要があります。省略すると、Windows コンポーネントが正常に機能しないことがあります。 属性が存在しない場合、アプリケーションはマルチスレッド アパートメント モデルを使用します。これは、Windows フォームではサポートされていません。

Note

Application Framework を使う Visual Basic プロジェクトでは、Main メソッドを STAThread でマークする必要はありません。 これは Visual Basic コンパイラによって自動的に行われます。

違反の修正方法

この規則違反を修正するには、エントリ ポイントに STAThreadAttribute 属性を追加します。 System.MTAThreadAttribute 属性が存在する場合は削除します。

どのようなときに警告を抑制するか

STAThreadAttribute 属性が不要でサポートされない .NET Compact Framework 向けの開発を行っている場合は、この規則による警告を抑制しても問題ありません。

次の例は、STAThreadAttribute の正しい使い方を示しています。

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);
        }
    }
}