0

所以我正在尝试编写一个基本的股票应用程序来从互联网上获取价格信息。我决定在 Visual Basic 中执行此操作,因为我有一些 VBA 知识和 Visual Studio 的免费副本。

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

我的问题是,这些对象在每次滴答时都被实例化是不是很糟糕?是否可以编写我的代码,以便在我按下 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

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

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

阿门

4

1 回答 1

0

每次调用都需要一个新MSXML.XMLHTTP对象。

但是您用来发送 POST 的对象、存储散列签名的对象以及您的 ScriptControl 都可能被重新使用。

在每个刻度上重新创建这些是否不好还有待观察。除非您根据某些指标衡量当前的绩效,否则您无法知道自己是否达到了绩效目标。

于 2013-11-14T17:09:52.707 回答