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がイマイチ

もし、Invokeジェネリクス版があれば

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してしまうと結局、シングルスレッドで動いているのと同じだから。