vb.net中的计时问题

时间:2010-11-08 15:42:16

标签: vb.net

我认为我有时间问题。它困惑我为什么。

在事件的触发器上,我调用一个函数来更新一个值:

Private Sub t0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles t0.Click
    Input.ppProperty = "blank"
    UpdateRecord("Hey", Input.ppProperty)
    MsgBox(Input.ppProperty)
End Sub 

UpdateRecord()应该将属性Input.ppProperty更新为值“Hey”。它会更新它,但直到UpdateRecord()完成。代码:

Sub UpdateRecord(ByVal updateValue As String, ByRef recordToUpdate As String)
    If recordToUpdate <> Nothing Then
        MsgBox(updateValue & " " & recordToUpdate & " " & Input.ppProperty)
    End If
    recordToUpdate = updateValue
    If recordToUpdate <> Nothing Then
        MsgBox(updateValue & " " & recordToUpdate & " " & Input.ppProperty)
    End If
End Sub

输出:

  

Hey Blank Blank'初始值
     功能结束时嘿嘿空白的价值      嘿'功能完成时的财产价值

它应该是:

期望的输出:

  

Hey Blank Blank'初始值
     嘿嘿嘿'在功能结束时的价值观      嘿'功能完成时的财产价值

注意区别,在函数完成之前,属性不会更新。 为什么呢?

修改 另外,我将如何解决此问题,以便在功能中进行更新?

2 个答案:

答案 0 :(得分:2)

当您传递属性ByRef时,会发生以下等效操作:

Dim temporaryValue As String = Input.ppProperty
UpdateRecord("Hey", temporaryValue)
Input.ppProperty = temporaryValue

没有直接解决这个问题。一个可能的解决方案是重写UpdateRecord方法,以便您可以将整个对象(Input)传递给它并直接操作属性值。只有这样才能直接反映这一变化。

答案 1 :(得分:0)

我认为它与。Strings有关,.Net是一种不可变类型。

你得到一个在ByRef中传递然后返回的临时字符串,导致之后设置Input.ppProperty

这样的事情:

Dim tempInput As String = Input.ppProperty
UpdateRecord("Hey", tempInput)
Input.ppProperty = tempInput

由于Input似乎在两种情况下都在范围内,为什么不这样做呢。

Sub UpdateRecord(ByVal updateValue As String)

    Input.ppProperty = updateValue

End Sub

然而,如果事实并非如此,我将需要再考虑一下。