我可以将变量ByRef传递给vb.net中的计时器事件吗?

我可以将变量ByRef传递给vb.net中的计时器事件吗?,vb.net,timer,pass-by-reference,Vb.net,Timer,Pass By Reference,我想在一定时间内设置一个变量的值。i、 e.myVar=1持续20毫秒,然后返回到0。我已经用定时器实现了这一点,但我唯一能做的就是为每个变量使用一个单独的定时器 我想有一个计时器,我可以通过引用或类似的方式传递一个持续时间和一个变量 我可以将变量ByRef传递给vb.net中的计时器事件吗?或者有类似功能的东西?这似乎有效。但我需要添加一个免责声明,我只是以一种非常简单的方式测试了它,没有检查内存泄漏等 将此子项添加到您的代码中 Public Sub SetVar(ByRef variable

我想在一定时间内设置一个变量的值。i、 e.myVar=1持续20毫秒,然后返回到0。我已经用定时器实现了这一点,但我唯一能做的就是为每个变量使用一个单独的定时器

我想有一个计时器,我可以通过引用或类似的方式传递一个持续时间和一个变量


我可以将变量ByRef传递给vb.net中的计时器事件吗?或者有类似功能的东西?

这似乎有效。但我需要添加一个免责声明,我只是以一种非常简单的方式测试了它,没有检查内存泄漏等

将此子项添加到您的代码中

Public Sub SetVar(ByRef variable As Integer, value As Integer, msDuration As Integer)
    variable = value
    Thread.Sleep(msDuration)
    variable = 0
End Sub
每次要将变量设置为某个时间段的值时,请在要更改该值的位置插入该值

Dim t As New Task(Sub()
                      SetVar(a, 100, 2000)
                  End Sub)
t.Start()

不,不能更改事件处理程序的签名。您可能可以编写一些完全不使用计时器的代码(使用任务,带有
延迟
连续
),但为什么您首先需要这样的东西呢?另外,我怀疑你能得到20毫秒的准确度。20毫秒只是一个例子。极端精确的计时不是我的目标。使用任务是Zohar建议的最佳方式,但如果必须使用计时器,可以在类级别声明变量(如果这是一个选项),然后在计时器事件中轻松使用。David我尝试了你的答案,它完成了我需要的操作@zohar我尝试了Task.Delay,如图所示,它工作得很好,但是它在执行时停止了表单上的所有其他内容,这不是我想要的(我知道我在最初的问题中没有提到)。我不熟悉Task.Delay,有没有一种方法可以在没有副作用的情况下使用它?我不是异步编程方面的专家。我认为,
Task.Delay
应该只延迟一个特定的任务。无论如何,如果David的答案解决了你的问题,你应该使用它(并将其标记为已接受,以便其他人知道问题已经解决。)