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属性を指定しなければならない。