
卒論の関係で、Visual Basic 2005 Express Editionを使用して、システムを構築しています。
スレッドまたはフォームが複数あるため、デリゲートを使用することになったのですが、invokeの対象であるメソッドで引数を使用することはできるのでしょうか?
引数なしの場合、現時点では次のように記述しています。
A.show()
A.Invoke(New MethodInvoker(AddressOf A.Status_Timer))
Public Sub Status_Timer()
処理
End Sub
MethodInvokerは、デリゲート宣言なしでinvokeを使えることができ、本来?のデリゲート宣言して、invokeを使う場合は以下のようになります。
A.show()
A.Invoke(New SetFocusDelegate(AddressOf A.Status_Timer))
Delegate Sub SetFocusDelegate()
Public Sub Status_Timer()
処理
End Sub
ここで、Status_Timer()に引数を指定して、たとえば、
Public Sub Status_Timer(ByVal data As integer)
処理
End Sub
とした場合、invokeでの記述がうまくいきません。
もともと、invokeではそんなことはできないかもしれませんが、何か方法ありますでしょうか?現時点では、引数を使用することができないので、スレッドまたはフォーム間で、プロパティを使用して、情報を渡しています。以下のような形です。できれば、プロパティを使用したくないのですが・・・
Public Property test() As state
Get
Return _test
End Get
Set(ByVal value As state)
_test = value
End Set
End Property
No.2ベストアンサー
- 回答日時:
MSDN の MethodInvoker デリゲートの説明にもありますが
http://msdn.microsoft.com/ja-jp/library/system.w …
-- 引用 --
void として宣言された、パラメータをとらない任意のメソッドを、マネージ コード内で実行できるデリゲートを表します。
-- 引用終わり --
ということなので、MethodInvoker はパラメータを取らないメソッド専用です。
本来は Delegate を自分で宣言するものなのですが、パラメータを取らないメソッドを使って Invoke を実行する機会は多いと思われるので、いちいち Delegate を宣言しなくても呼び出せるようにするために、フレームワーク側で用意されているのが、MethodInvoker です。
No.1
- 回答日時:
Control.Invoke はオーバーロードされていて、object の配列を取るバージョンがあります。
それはまさに、引数を渡すためにあります。http://msdn.microsoft.com/ja-jp/library/system.w …
Delegate の宣言側も同じ Integer 型の引数を取るように修正して、Invoke の第2引数以降にパラメータを書けばよいはずです。
回答ありがとうございます。
デリゲートにも同じように引数を取るようにするとできました。以下、修正した記述。
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
JSPで<SELECT>の中にDBから持っ...
-
VBScriptからストアドプロシー...
-
VBPをダブルクリックするとたま...
-
System.load() と System.loa...
-
boolean型のフィールドとゲッタ...
-
setMinimumSizeについて
-
Excel VBA シェイプの原型のサ...
-
Java 可変長引数と優先度
-
final修飾子を使っているのに、...
-
FEM解析の読み方は?
-
タグチメソッドと実験計画法の違い
-
ODBCでMoveNextがうまく動作し...
-
Eclipseで呼び出し元参照をしたい
-
mainメソッドのthrows節で設定...
-
JNAで関数ポインタの表し方
-
コマンドプロンプト実行後に画...
-
【sendkeysメソッドが動かずに...
-
Application.Wait の参照設定
-
処理内容がほぼ同じメソッドの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
配列のメソッド
-
mainメソッドのthrows節で設定...
-
final修飾子を使っているのに、...
-
0歳児の指しゃぶりに関して
-
javascriptからjavaを呼び出したい
-
DataGridViewでセルクリックイ...
-
JSPで<SELECT>の中にDBから持っ...
-
boolean型のフィールドとゲッタ...
-
Labelコントロールに数字を代入...
-
ウィンドウを最前面にできません
-
処理内容がほぼ同じメソッドの...
-
eclipse-Tomcatでのデバッグに...
-
CALLされていないメソッドを見...
-
FEM解析の読み方は?
-
エクセルVBAにおけるON TIMEメ...
-
Application.Wait の参照設定
-
コマンドプロンプト実行後に画...
-
VBA コピーが出来ません…!
-
drawStringで文字間隔の調整
おすすめ情報