Formを使ってWindowsアプリを作ろう! (3/5)
作成:2013-08-24 10:42
更新:2013-08-24 10:42
更新:2013-08-24 10:42
■MyFormを実行する
では、作成したMyFormクラスのインスタンスを作って表示させるプログラムを作成しましょう。これはProgramクラスとして用意しておくことにします。例によって、Mainメソッドを用意して、そこでMyFormを実行する処理を書いておけばよいでしょう。
下のリスト欄に、そのサンプルを挙げておきます。ここでは、いくつか見慣れないものが登場していますので順に説明しましょう。
●シングルスレッドの指定
この「STAThread」というのは、このMainメソッドがシングルスレッドで実行されることを示すものです(STAは「Single Thread Apartment」の略です)。.netフレームワークのウインドウ(ここではFormクラス)は、原則としてシングルスレッドで実行されるように設計されています。つまり、ウインドウの内部で呼び出されるすべての処理は、ウインドウを実行しているスレッド内ですべて処理される、ということを示します。
マルチスレッド対応だと、さまざまなところから同時にウインドウの機能を呼び出すことができますが、同時に複数のスレッドを管理してトラブルが起こらないようにする処理を自前で考えなければならず、とても大変です。シングルスレッドであれば、常に「1つのスレッドで1つの処理が実行される」という形になりますので、複数のスレッドが同時にアクセスしたりするために発生するトラブルの対応などややこしいことは何も考えずに済みます。
基本的に、Formを実行するMainでは、必ず[STAThread]を指定する、と考えてください。
●Applicationの実行
このRunメソッドは、引数にWindowクラスのインスタンスを指定することができます。Windowクラスというのはウインドウのベースとなるクラスで、FormクラスもこのWindowを継承して作られています。これにより、そのウインドウをアプリケーションとして表示し実行する、というわけです。
このProgramクラスの部分は、表示するウインドウの内容がどう変わろうとほとんど違いはありません。ですから、「Applicationの起動は、こう書く」と丸暗記してしまって構いません。
下のリスト欄に、そのサンプルを挙げておきます。ここでは、いくつか見慣れないものが登場していますので順に説明しましょう。
●シングルスレッドの指定
[STAThread]最初に、Mainメソッドの手前にこんな文が書かれていますね? このように、メソッドの手前に[○○]といった形式で書かれる文は「属性」というものを指定するための記述です。つまり、そのメソッドの性質を指定するための記述です。
この「STAThread」というのは、このMainメソッドがシングルスレッドで実行されることを示すものです(STAは「Single Thread Apartment」の略です)。.netフレームワークのウインドウ(ここではFormクラス)は、原則としてシングルスレッドで実行されるように設計されています。つまり、ウインドウの内部で呼び出されるすべての処理は、ウインドウを実行しているスレッド内ですべて処理される、ということを示します。
マルチスレッド対応だと、さまざまなところから同時にウインドウの機能を呼び出すことができますが、同時に複数のスレッドを管理してトラブルが起こらないようにする処理を自前で考えなければならず、とても大変です。シングルスレッドであれば、常に「1つのスレッドで1つの処理が実行される」という形になりますので、複数のスレッドが同時にアクセスしたりするために発生するトラブルの対応などややこしいことは何も考えずに済みます。
基本的に、Formを実行するMainでは、必ず[STAThread]を指定する、と考えてください。
●Applicationの実行
Application.Run(new MyForm());アプリケーションを実行し、そこでMyFormを表示しているのがこの文です。アプリケーションは、Applicationクラスとして用意されています。その中の「Run」メソッドを呼び出すことで、アプリケーションが実行されます。
このRunメソッドは、引数にWindowクラスのインスタンスを指定することができます。Windowクラスというのはウインドウのベースとなるクラスで、FormクラスもこのWindowを継承して作られています。これにより、そのウインドウをアプリケーションとして表示し実行する、というわけです。
このProgramクラスの部分は、表示するウインドウの内容がどう変わろうとほとんど違いはありません。ですから、「Applicationの起動は、こう書く」と丸暗記してしまって構いません。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
using System; using System.Windows.Forms; namespace MyFrmApp { class Program { [STAThread] private static void Main(string[] args) { Application.Run(new MyForm()); } } }
※関連コンテンツ