none
BeginInvoke传值出现了问题 RRS feed

  • 问题

  •             Private Sub ClientCallbackMsg(ByVal Bytes() As Byte)
                        If MainControl.InvokeRequired Then 
                            Dim ClientCD As New ClientCallbackDelegate(AddressOf Me.ClientCallbackMsg)
                            MainControl.BeginInvoke(ClientCD, Bytes)
                        Else
                            Dim args As New ClientCallbackBL(Bytes)
                            RaiseEvent ClientCallback(Me, args)
                        End If
                End Sub

    在上述程序片段中,当调用ClientCallbackMsg第一时,Bytes的值为{49,50},在判断非控件线程后执行 MainControl.BeginInvoke(ClientCD, Bytes) 后,第二次调用ClientCallbackMsg,Bytes的值为{0,50},这是个什么情况??????


    2013年6月13日 2:51

答案

  • 我知道是怎么回事了,是程序运行太快了,回调委托还没有建立完成这边就把局部变量当垃圾回收了.
    2013年6月13日 6:05
  • MainControl.BeginInvoke(ClientCD, Bytes)这样写是传地址, Bytes变量被回收了,首位改成0了.

    MainControl.BeginInvoke(ClientCD, Bytes.ToArray)这样写是传值,这样就正常了.

    2013年6月13日 6:28

全部回复

  • 我知道是怎么回事了,是程序运行太快了,回调委托还没有建立完成这边就把局部变量当垃圾回收了.
    2013年6月13日 6:05
  • MainControl.BeginInvoke(ClientCD, Bytes)这样写是传地址, Bytes变量被回收了,首位改成0了.

    MainControl.BeginInvoke(ClientCD, Bytes.ToArray)这样写是传值,这样就正常了.

    2013年6月13日 6:28