トップC# > STAThread属性

STAThread属性

1.STAThread属性

GUIアプリケーション・プログラムは次のように、static void Mainの直前に [STAThread] を記述する。 これはアプリケーションの COM スレッド モデルが シングルスレッド アパートメント (STA: Single-Threaded Apartment) であることを示す。

using System;
using System.Windows.Forms;

class Program {
    [STAThread]
    static void Main() {
        Application.Run(new Form1());
    }
}

class Form1 : Form {
    // 省略
}

もう一つ簡単な例を下に示す。

using System;
using System.Windows.Forms;

class ClipBoard {
    // [STAThread]
    static void Main() {
        Clipboard.SetText("クリップボードに文字をコピーします。");
    }
}

このプログラムから [STAThread] を除いてコンパイル・実行すると、 次のように実行時エラーとなる。

ハンドルされていない例外: System.Threading.ThreadStateException: OLE が呼び出さ
れる前に、現在のスレッドが Single Thread Apartment (STA) モードに設定されていな
ければなりません。Main 関数に STAThreadAttribute が設定されていることを確認して
ください。
   場所 System.Windows.Forms.Clipboard.SetDataObject(Object data, Boolean copy,
Int32 retryTimes, Int32 retryDelay)
   場所 System.Windows.Forms.Clipboard.SetText(String text, TextDataFormat forma
t)
   場所 ClipBoard.Main()

文献[2]にあるように、Windows フォームを使用するすべてのアプリケーションは エントリ ポイントにSTAThread属性を指定しなければならない。

A.リファレンス

[1] STAThreadAttribute クラス
[2] Windows フォームのエントリ ポイントを STAThread でマークします