2016-10-13 6 views
0

アニメーション用のクラスを作成します。 私の問題は例外です: "'ByRef'パラメータ 'value'はラムダ式では使用できません。".net ByRefパラメーターデリゲートサブプロシージャー(EventHandlerなし)

私は自分の問題を解決することはできません。私のクラスは、EventHandlerを使わずにTestValueを書き直しています。

Public Class Form1 
    Dim TestValue As Single = 0 
    Dim TestAnim As Animating 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     TestAnim = New Animating(100, TestValue, 1, AddressOf Me.Invalidate) 
    End Sub 
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
     TestAnim.start() 
    End Sub 
    Private Sub Form1_Invalidated(sender As Object, e As InvalidateEventArgs) Handles Me.Invalidated 
     Debug.WriteLine(TestValue) 
    End Sub 
End Class 
Public Class Animating 
    Dim _to, _value, _stepping As Single 

    Public Delegate Sub Proc() 
    Dim procedure As Proc 

    Public Delegate Sub Resulting(ByRef V2 As Single) 
    Dim procedures As Resulting 

    Sub New(ByVal Vto As Single, ByRef value As Single, ByVal stepping As Single, ByRef obj As Proc) 
     _to = Vto 
     _value = value 
     _stepping = stepping 
     procedure = obj 
     procedures = New Resulting(Sub() 
             calc(value) 
            End Sub) 
    End Sub 
    Sub start() 
     Threading.ThreadPool.QueueUserWorkItem(New Threading.WaitCallback(Sub() 
                       calc(_value) 
                      End Sub)) 
    End Sub 
    Sub calc(ByRef value As Single) 
     Threading.Thread.Sleep(50) 
     value += _stepping 
     procedures(value) 
     procedure.Invoke 
     If value >= _to Then Exit Sub 
     calc(value) 
    End Sub 

End Class 

が助けてくれてありがとう:

は、ここに私のコードです。 .NET 2.0でVB 2015を使用します。

答えて

0

ラムダ式の誤差は、try this linkです。これは、エラーが最初に割り当てる前に、あなたは機能別の変数に割り当てるにはcalc()

しようとするの参照として直接 ByRefの変数を使用しているという事実であるあなたに

EDITを助けるかもしれません

Dim temp as Single = value 
procedures = New Resulting(Sub() 
           calc(temp) 
          End Sub) 

のような機能、あなたは

+0

素晴らしいことだ質問を、明確にした場合だけ答えとしてリンクを投稿しないでください - MORを配置しようこの記事を提出した理由を説明し、これによって解決されると思われるエラーを説明します。 – LordWilmore

+0

修正済み、建設的なコメントありがとうございました – mmgfrcs

+0

例外は削除されていますが、プロシージャが正しく動作しません。 ByRefで使用する変数で、スレッドを実行している間は書き換えません。 – Zserigta