VB.NETで意味のないInvokeをlogる
今、学んだことw
■意味のないInvoke
Private Sub btn_Aaa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Aaa.Click Dim t As New Threading.Thread( New Threading.ThreadStart( Sub() Me.Invoke(Sub() Dim wsBbb As New BbbWebService wsBbb.GetDdd(Me.cmb_Ccc.CodeText) End Sub End Sub))) t.Start() End Sub
■意味のあるInvoke
Private Sub btn_Aaa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Aaa.Click Dim t As New Threading.Thread( New Threading.ThreadStart( Sub() Dim wsBbb As New BbbWebService Dim s As String Me.Invoke(Sub() s = Me.cmb_Ccc.CodeText) wsBbb.GetDdd(s) End Sub)) t.Start() End Sub
Dim s As String Me.Invoke(Sub() s = Me.cmb_Ccc.CodeText) wsBbb.GetDdd(s)
は、
wsBbb.GetDdd(DirectCast(Me.Invoke(Function() Me.cmb_Ccc.CodeText()), String))
とすると無駄な変数が一個減るけどDirectCastがイマイチ
wsBbb.GetDdd(Me.Invoke(Of String)(Function() Me.cmb_Ccc.CodeText()))
となってシンプル...
話逸れるけど、むかーしVB系で仕事してたころ、式のネストってのはどーかなーって思ってた。
でも、括弧いい系ばっかやってたらエレガント(シンタクス上の無駄がない)であればおkになったww
(10ptsで800x500pic位まで?)
なぜ意味がないかを書こうw
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.invoke(v=vs.80).aspx
コントロールの基になるウィンドウ ハンドルを所有するスレッド上で、デリゲートを実行します。
つまり、『サブスレッドからメインスレッド(Windowsアプリケーションが実行されているスレッド)に制御を委譲する』ということ。
サブスレッドの処理を全部Invokeしてしまうと結局、シングルスレッドで動いているのと同じだから。