*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

<C#>

マルチスレッドによる複数メインフォームにおいて、フォーム1で自作イベントを発生させ、それをフォーム2で対応する


*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*


「<C#> メインルーチンにおけるマルチスレッドプログラミング」

における一連の説明(知恵ノート)において、ここでは、

 

「<C#> マルチスレッドによる複数メインフォームにおいて、フォーム1で自作イベントを発生させ、それをフォーム2で対応する」

 

について説明します。






総合の目次


本ページを含めた関連事項の総合目次です。

http://note.chiebukuro.yahoo.co.jp/detail/n191523







はじめに


ここでは、メインルーチンを複数のスレッドで構成させるサンプルを紹介します。
各スレッドでは、それぞれフォームを実行しますので、複数のメインフォームで構成されるアプリケーションソフトになります。

なお、本サンプルでは、あるフォーム上のイベント(自作イベント)を、別のフォームに伝達させるサンプルです。



 

 

メインルーチンにおけるマルチスレッドプログラミングについて


前述の通り、ここでは、メインルーチンを複数のスレッドで構成させるサンプルを紹介します。
すなわち、メインルーチンでマルチスレッドプログラミングを行い、それぞれのスレッドでフォームを起動させます。
なお、本サンプルでは、Form1 と Form2 の2個のフォームを起動させます。
この場合、単純に複数フォームで構成するプログラムと言う訳ではありません。
ちなみに、一般の複数フォームのプログラムの場合は、メインフォームがひとつあって、そこから子フォームを起動します。
これに対して、本件での複数フォームのプログラムは、メインのフォームが複数個存在するプログラムになります。

 

フォーム間のタイミングを合わせる方法


複数のフォームを取り扱うアプリケーションソフトの場合、フォームとフォームとの間で、行なう処理のタイミングを合わせたい場合があります。

本サンプルでは、フォームForm1でイベント(自作イベント)が発生したタイミングで、フォームForm2の処理(文字表示)を実行します。

 

 

 

 

 

今回のサンプルの特徴(「はじめに」のまとめ)


<1>
Form1 クラスと、 Form2 クラスによる複数(2個)のフォームを起動します。

 

<2>
フォームForm1でイベント(自作イベント)が発生したタイミングで、フォームForm2の処理を実行します。

 

 

 




 

サンプルコード


ここで取り上げるサンプルは、なるべく複雑にならない範囲で、メインでのマルチスレッドを確かめられるものとします。






本サンプの仕様概要


本サンプルを実行すると、2個のフォームが起動します。
フォームForm1 のボタンをクリックしたタイミングで、フォームForm2 のラベルに文字表示「こんにちは」を表示します。

 



 

フォームデザイン等の前準備


コードを記述する前に、フォームのデザイン作成などの、以下の前準備を行なって下さい。

<プロジェクトの作成>
本サンプルの確認用に、新規にプロジェクトを作成して下さい。
プロジェクトの種類は、「Windowsフォームアプリケーション」です。

<フォームの追加>
新しいフォームを、下記操作で追加してください。
[プロジェクト] - [Windows フォームの追加]で、「新しい項目の追加」画面を表示します。
その「新しい項目の追加」画面で、ファイル名を入力してから[追加]ボタンを押します(取り決めたいファイル名が特に無ければ、デフォルトのファイル名で構いません)。
そうすると、新しいフォーム(Form2)のデザイン画面等が追加されます。

 

<フォーム(Form1、Form2)のデザイン>
各フォームごとに用意しましたページ(後述)に記していますので、そちらを参照して下さい。

<イベントプロシージャの作成>
各フォームごとに用意しましたページ(後述)に記していますので、そちらを参照して下さい。


<クラスを書くためのソースファイルの作成>

[プロジェクト] - [クラスの追加] で、「新しい項目の追加」画面を表示する。
その画面の [ファイル名]欄に任意のファイル名(クラス用ソースファイルのファイル名)を記入する。
[追加]ボタンをクリックする。

 

なお、ここで作成されたソースファイルには、後述しますクラスのコード(Form1イベント定義クラスのコード等)を記述します。





 

コード


各フォームごとに用意しましたページ(後述)に記していますので、そちらを参照して下さい。





コードの解説


各フォームごとに用意しましたページ(後述)に記していますので、そちらを参照して下さい。





各フォームでのデザインやコード


Form1のコード等の詳細のページ
http://note.chiebukuro.yahoo.co.jp/detail/n199464

 

 

Form2のコード等の詳細のページ

http://note.chiebukuro.yahoo.co.jp/detail/n212409

 

 

Program.csファイルのMainルーチンのおけるコード等の詳細のページ  
http://note.chiebukuro.yahoo.co.jp/detail/n212419 

 

 

Form1イベント定義クラスのコード

http://note.chiebukuro.yahoo.co.jp/detail/n212422

Form1イベント管理クラスのコード

http://note.chiebukuro.yahoo.co.jp/detail/n212859


 

 


 

実行結果


本サンプルを実行すると、2個のフォームが起動します。
フォームForm1 のボタンをクリックしたタイミングで、フォームForm2 のラベルに文字「こんにちは」が表示されます。

 


 実行結果1

 

 

 

 

 実行結果2

 

 



 

さいごに

 

本サンプルの範囲では、スレッドとフォームを起動して、フォーム間をイベントでやり取りしただけです。
後のサンプルで、応用的なものを行なう予定です。