VB.NET定时器的问题

youyiyang 2016-01-07 12:34:38
大家好!

在一个项目里需要设计一个定时器,是根据表格里面的一个字段值作为定时的间隔,然后每隔这个时间启动发数据报文命令。
比如这个表格的字段“时间间隔(ms)”
| 时间间隔(ms)|
------------------------
20
------------------------
30
------------------------
10
------------------------
20
------------------------

。。。。

应该怎么设计这个定时器呢?
我前面是用的是工具箱里面的System.Timers,如果用这个,该怎么设计?
...全文
329 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
youyiyang 2016-01-11
  • 打赏
  • 举报
回复
用sleep也是可以的吧。结贴了。
youyiyang 2016-01-10
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
可以试试system.threading.timer,参照https://msdn.microsoft.com/zh-cn/library/system.threading.timer(v=vs.90).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1,如果要改变时间间隔可以直接用change方法
谢谢,按照你的提示,已经完成了。
 Dim ThreadItem1 As System.Threading.Timer = New System.Threading.Timer(New TimerCallback(AddressOf SimControllSending), autoEvent, 0, 0)
        While i <= zzz
            autoEvent.WaitOne(999999999, False)
            temp = Split(Interval(i), "|")
            dueTime = temp(0).Trim()
            ThreadItem1.Change(dueTime, 0)
            Console.WriteLine("i=" & i & ",   " & Interval(i) & "ms")
            Console.WriteLine(vbCrLf & "Changing period." & vbCrLf)
            i += 1
        End While
        ThreadItem1.Dispose()
        Interval = Nothing
        Console.WriteLine(vbCrLf & "Destroying timer.")
 Public Sub SimControllSending(stateInfo As Object)
        Dim autoEvent As AutoResetEvent = DirectCast(stateInfo, AutoResetEvent)
        Dim bDataOut() As Byte, Buf As String
        Dim iSentCount As Integer
        Dim Encode1 As Encoding = Encoding.ASCII         '声明编码对象,使用ASCII  
        Dim bOutHexTemp() As String
        Dim temp As String()
        Try
            temp = Split(Interval(SimControllerSendCount), "|")
            'Me.txtSent.Text = "dfjdjflkjf"  'CStr(SimControllerSendCount)
            Buf = temp(1).ToString().Trim()
            ' txtPacket.Text = "0000000000000" 'Buf
            bOutHexTemp = Split(Buf, " ")
            ReDim bDataOut(bOutHexTemp.Count - 1)
            For i = 0 To bOutHexTemp.Count - 1
                bDataOut(i) = Val("&H" & bOutHexTemp(i))
            Next
            iSentCount = bDataOut.GetLength(0)     '发送总字节数  
            RS232.Write(bDataOut, 0, iSentCount)
        Catch ex As Exception
            'MessageBox.Show("输入数值错误:" + ex.ToString, "错误通知", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
        Console.WriteLine(DateTime.Now.ToString("h:mm:ss.fff") & ", i am sending ...now ...  " & Buf)
        autoEvent.Set()
        SimControllerSendCount += 1
    End Sub
Justin-Liu 2016-01-07
  • 打赏
  • 举报
回复
看看API里关于它的用法
xdashewan 2016-01-07
  • 打赏
  • 举报
回复
可以试试system.threading.timer,参照https://msdn.microsoft.com/zh-cn/library/system.threading.timer(v=vs.90).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1,如果要改变时间间隔可以直接用change方法

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧