GalaxyMan Ответов: 1

Vb.net добавить http-запрос в таймер


Я работаю в приложении VB winform, которому нужно отправить http-запрос на веб-сервис API, чтобы получить от него информацию
моя функция для получения данных работает нормально и получить данные в порядке
проблема в том, что мне нужно добавить эту функцию в таймер, чтобы продолжать получать данные в приложение
Я не могу заставить его работать таким образом когда я добавляю функцию в таймер он получает данные в первый раз а затем останавливается
Я должен перезапустить приложение, и тогда оно работает только в первый раз

и несколько раз это дает мне " задание было отменено"
Есть идеи, как заставить его работать

<pre> <pre> Public Async Function RunAsync() As Task
        Try
            Dim client As HttpClient = New HttpClient()
            'client.Timeout = TimeSpan.FromMinutes(600)
            Dim Auth As New Auth()
            Auth.UserName = "UserName"
            Auth.Password = "Password"

            Dim wait As New WaitRequest()

            wait.ServiceId = 72
            wait.TerminalKey = ""
            wait.SimCard = ""
            wait.Auth = Auth

            Dim response As HttpResponseMessage = Await client.PostAsJsonAsync("http://213.158.164.90/TopUpTest/api/getnew", wait)
            Dim content As HttpContent = response.Content
            'TimeSpan.FromMinutes(30)
            ' Get contents of page as a String.
            Dim result As String = Await content.ReadAsStringAsync()
            'client.Dispose()
            'client.CancelPendingRequests()
            'Convert the Json to Object
            'Dim Invoice As List(Of Invoices) = Newtonsoft.Json.JsonConvert.DeserializeObject(Of List(Of Invoices))(result)

            ' If data exists, print a substring.
            If result IsNot Nothing And result.Length > 50 Then

                'Timer1.Enabled = False
                'MsgBox(result)
                frmMain.btnStartRecharge.BackColor = Color.Transparent
                Dim jsonString As String = result
                Dim dtJson As DataTable = ConvertJSONToDataTable(jsonString)
                frmMain.InvoiceDataGridView.DataSource = dtJson
                frmMain.lblMobRow.Text = frmMain.InvoiceDataGridView.RowCount
                If frmMain.InvoiceDataGridView.RowCount > 1 Then
                    Dim Rcount As Int16 = frmMain.InvoiceDataGridView.RowCount
                    frmMain.InvoiceDataGridView.Rows.RemoveAt(Rcount - 2)
                End If
            End If
        Catch ex As Exception
            ' Show the exception's message.
            frmMain.lblmessage.Text = ex.Message
            frmMain.btnStartRecharge.BackColor = Color.Red
        End Try
    End Function


Что я уже пробовал:

Я пытался
'client.Timeout = TimeSpan.FromMinutes(600)

'client.Dispose()

'client.CancelPendingRequests()

1 Ответов

Рейтинг:
2

Graeme_Grant

Следующий (непроверенный) код будет ждать до тех пор, пока не произойдет то, что произойдет раньше:

Dim tasks = New Task() _
{
    RunAsync(),
    Task.Delay(5000)
}

Task.WaitAny(tasks)


GalaxyMan

Я пробую это это дает мне эту ошибку

Дополнительная информация: невозможно привести объект типа ' System.Нарезание резьбы.Задачи.Задача [] "набрать" систему.Нарезание резьбы.Задачи.Задача".