VB:在Timer定时器之前实例化对象并在每个tick上使用相同的对象

时间:2013-11-14 16:51:20

标签: vb.net timer

所以我正在尝试编写一个基本的自动收报机应用程序,用于从互联网上获取价格信息。我决定在visual basic中执行此操作,因为我对VBA和Visual Studio的免费副本有一些了解。

目前,我有一个具有计时器对象的表单模块。在每个tick(1秒间隔)上,我调用一个函数(在一个单独的模块中),它试图从API获取数据。这是通过将POST发送到HTTP地址并需要创建MSXML.XMLHTTP对象来完成的。我还需要创建另一个对象来散列我发送的一些签名和一个ScriptControl对象来解析JSON响应。

我的问题是,这些对象在每个tick上实例化都很糟糕?是否可以编写我的代码,以便在按下ON按钮时实例化对象,并且拉动函数在每个刻度线上使用这些现有对象?如果是这样,如何访问这些对象?

编辑:这是我认为我的代码看起来如何的简要概述:

在Form1.vb中我有:

    Imports System.Net
    Imports System.Text
    Imports System.IO
    Imports System.Security.Cryptography

Public Class Form1

    Public Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
       Application.DoEvents()

       ' I would like to pass the oXMLHTTP object here so that i can use it in the getPrice() function below, use it in there to send POST requests
       Dim ticker_API As String = "https://example.com/api/"
       Me.PriceBox.Text = getPrice(ticker_API)

    End Sub

    ' on button starts timer
    Public Sub OnButton_Click_1(sender As Object, e As EventArgs) Handles OnButton.Click
        ' start execution...
        Timer1.Enabled = True

       ' I would like to instantiate the object here and use it by the getPrice() function
       Dim oXMLHTTP As Object
       oXMLHTTP = CreateObject("msxml2.xmlhttp")
    End Sub

End Class

在Module1.vb中我有getPrice()函数:

Module Module1

function getPrice(byval postURL as string, byval oXMLHTTP as object) as string
       Dim argumentString as String

       With oXMLHTTP
            .Open("POST", postURL, False)
            .setRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.0)")
            .setRequestHeader("Content-type", "application/x-www-form-urlencoded")
            .send(argumentString)
            Return .responseText
        End With

End Function

End Module

谢谢,如果需要任何其他信息来回答这个问题,请告诉我。

编辑:我想在每个时间间隔进行多次数据拉取函数调用。

阿尔钦

1 个答案:

答案 0 :(得分:0)

每次通话都需要一个新的MSXML.XMLHTTP对象。

但是用于发送POST的对象,存储散列签名的对象以及ScriptControl都可能被重用。

在每个刻度线上重新创建这些是否有害仍有待观察。在衡量相对于某个指标的当前绩效之前,您无法知道,这样您就知道自己是否达到了绩效目标。