【发布时间】:2021-03-12 15:35:32
【问题描述】:
我正在做一个小部件,使用 Binance API here 显示比特币价格
我没有使用 Json 格式,因为我只需要解析一个字符串,尽管我知道你们中的许多人会说使用 json。无论如何,我想让软件尽可能简单,但是有一个小问题。 我正在使用 webclient 下载源代码并使用计时器对其进行更新。 我认为每次创建新的网络客户端时我都犯了一个错误,因为当我想移动表单时,即使它没有冻结也不能正确移动。 我使用的代码是:
Private Sub webclientbtc()
Dim wc As New Net.WebClient
Dim WBTC As IO.Stream = Nothing
wc.Encoding = Encoding.UTF8
WBTC = wc.OpenRead("https://api.binance.com/api/v1/ticker/24hr?symbol=BTCEUR")
Dim btc As String
Using rd As New IO.StreamReader(WBTC)
btc = rd.ReadToEnd
End Using
'---------BTC PRICE---------'
Dim textBefore As String = """lastPrice"":"""
Dim textAfter As String = ""","
Dim startPosition As Integer = btc.IndexOf(textBefore)
startPosition += textBefore.Length
Dim endPosition As Integer = btc.IndexOf(textAfter, startPosition)
Dim textFound As String = btc.Substring(startPosition, endPosition - startPosition)
Dim dNumber As Double = Val(textFound.ToString)
Label1.Text = dNumber.ToString("n2")
'-------------------------------------'
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
webclientbtc()
End Sub
计时器间隔为 1000 毫秒,这对我保持更新非常有用。 关于如何避免在每次更新时创建新的 webclient 有什么想法吗? 谢谢
【问题讨论】:
-
WebClient 确实有一个 .Dispose 方法,因此应该在创建另一个之前处理它。如果您使用表单级别的 New WebClient,请在应用程序末尾找到一个放置位置。
-
我正在考虑在计时器滴答期间处理它,这是个好主意吗?
-
您可以在
webclientbtc方法中使用Using块。End Using处理。Tick事件不包含对WebClient的引用,因此无法在此处处理。