目次

delegateとinvoke

 C#、VB.NETを利用すると、クラスからオブジェクトインスタンスを
 生成して、複数のスレッドを使って処理するプログラミングが要求
 されました。

 一度マルチプロセスによるアプリケーション開発を経験しましたが、
 マルチスレッドは未経験です。そこで、Internetで情報を集めます。
 いろいろなホームページを参考にし、ハードウエアを作るのと同じ
 ようにすればよいと理解できました。

 自分は、ロボットを動かしたいという動機で、コンピュータを触り始めました。
 マイクロコンピュータの性能が低かった時代だったので、デジタル回路を接続
 して、機能強化と性能アップをしていました。

 デジタル回路で付加した機能を、マイクロコンピュータ(マイコン)から
 利用するために、新たにプログラムコードを入れます。
 これと似た機構は何かというと、delegateとinvokeでした。

 invokeは、新たに入れたプログラムコードを実際に使うことで
 delegateは、新たに入れたプログラムコードがあることを宣言
 することです。

 このカタチを理解できたとき、万歳しました。(^o^)

 実際にハードウエア付加ではなく、クラスメソッドを使う仕組み
 というのが正しいのですが、ハードウエアから入った自分として
 は、上の解釈で充分でした。

 やりたいことは、以下の3つです。

 この3機能を使いたいので、delegateを利用して
 定義してあると宣言します。
    delegate void TextSet(string stxt);
    delegate void SaveText(string text);
    delegate void ClrText();

 この宣言で、複数のスレッドから3機能が見えるようになります。
 見えれば、使う側のスレッドはinvokeを利用してメソッドを呼び
 出します。

 invokeは、次の2パラメータを指定します。
  • メソッドのエントリアドレス
  • メソッドに渡すパラメータのエントリアドレス
 今回は、テキストボックスのクラスメソッドとして3機能を  定義してあるので、クラスのオブジェクトインスタンス名を  使いエントリアドレスを指定します。  パラメータは、オブジェクトインスタンスを確保して  その中に入れて渡します。  テキストボックスクラスのオブジェクトインスタンスは   rMyTextBox  としたので、3機能を利用する場合は、次のようにコード  を記述します。  受信文字列の表示   Invoke(new TextSet(rMyTextBox.SetText), new object[] { result });  受信文字列のファイルへの保存   Invoke(new SaveText(rMyTextBox.SaveText), new object[] { gFName });  受信文字列クリア   Invoke(new ClrText(rMyTextBox.ClrText));  作成コードが動いたときは、嬉しかったのですが  「随分と面倒だなあ。」と思いました。  マルチスレッドであることを理解すれば、この程度ならば  と思わないではないですが。もっと簡単に使える仕組みに  しないと、いけないのではと思います。
目次

inserted by FC2 system