• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Visual Basic 2005 でのデリゲート、Invokeについて)

Visual Basic 2005でデリゲートとInvokeを使用する方法

このQ&Aのポイント
  • Visual Basic 2005 Express Editionを使用してシステムを構築する際、複数のスレッドやフォームを扱うためにデリゲートを使用することがあります。Invokeの対象となるメソッドで引数を使用する方法について説明します。
  • 引数なしの場合は、MethodInvokerを使用してInvokeを行うことができます。引数を指定したい場合は、デリゲートを宣言してInvokeを使用する必要があります。
  • 引数を指定したい場合は、メソッドの引数を変更し、Invokeでの記述を適切に行う必要があります。現在の方法では引数を使用することはできませんが、スレッドやフォーム間でプロパティを使用して情報をやり取りする方法もあります。

質問者が選んだベストアンサー

  • ベストアンサー
  • ttkai00
  • ベストアンサー率58% (18/31)
回答No.2

MSDN の MethodInvoker デリゲートの説明にもありますが http://msdn.microsoft.com/ja-jp/library/system.windows.forms.methodinvoker(VS.80).aspx -- 引用 -- void として宣言された、パラメータをとらない任意のメソッドを、マネージ コード内で実行できるデリゲートを表します。 -- 引用終わり -- ということなので、MethodInvoker はパラメータを取らないメソッド専用です。 本来は Delegate を自分で宣言するものなのですが、パラメータを取らないメソッドを使って Invoke を実行する機会は多いと思われるので、いちいち Delegate を宣言しなくても呼び出せるようにするために、フレームワーク側で用意されているのが、MethodInvoker です。

reggusan
質問者

お礼

つまり、MethodInvokerでは、デリゲートは引数なしで宣言されているってことですね。度々、回答ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • ttkai00
  • ベストアンサー率58% (18/31)
回答No.1

Control.Invoke はオーバーロードされていて、object の配列を取るバージョンがあります。それはまさに、引数を渡すためにあります。 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.invoke(VS.80).aspx Delegate の宣言側も同じ Integer 型の引数を取るように修正して、Invoke の第2引数以降にパラメータを書けばよいはずです。

reggusan
質問者

お礼

回答ありがとうございます。 デリゲートにも同じように引数を取るようにするとできました。以下、修正した記述。 Me.Invoke(New SetFocusDelegate(AddressOf Me.Status_Timer), 10, 100) Delegate Sub SetFocusDelegate(ByVal a As Integer, ByVal b As Integer) Sub Status_Timer(ByVal a As Integer, ByVal b As Integer) Debug.Print(a.ToString + "," + b.ToString) End Sub MethodInvokerの方が、なぜかうまくいかないです。省略しているデリゲートにも対応するのかと思ったのですが、うーむ。もう少しがんばってみます。

すると、全ての回答が全文表示されます。

関連するQ&A