Несколько потоков таймера с одним Datagridview - PullRequest
0 голосов
/ 26 июня 2019

Я использую VB.NET с Visual Studio 2017.

Я тестирую форму, которая имеет представление данных.Эта сетка заполняется начальными торговыми символами.После загрузки символов мне нужно нажать кнопку «Пуск», которая запускает таймер1 для поиска последней цены этого символа из биржи и запускает таймер2.Timer2 будет искать определенные условия цены, если выполнятся, разместит ордер на обмен и снова будет искать другой цикл.Пока это происходит, timer1 также работает с интервалом в 2 секунды, чтобы получить последнюю торговую цену.

Я использую два разных BackgroundWorker для каждого таймера, чтобы выполнить эти две задачи с сеткой.

Это работает почти нормально, но иногда оба или один из таймеров отключаются.

Я ищу другой хороший и лучший подход к этому, что касается кода, дизайна и архитектуры.Если кто-нибудь может помочь.

Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    Me.Timer1.Stop()

    Try
        With Me.DataGridView4
            For RowIndex = 0 To .RowCount - 1
                With .Rows(RowIndex)
                    'CODE FOR CHECKING LTP OF SYMBOL
                End With
            Next
        End With
    Catch ex As Exception

    End Try
End Sub

Private Sub BackgroundWorker2_DoWork(sender As Object, e As DoWorkEventArgs) Handles BackgroundWorker2.DoWork
    Me.Timer2.Stop()


    Try

        For Each row As DataGridViewRow In Me.DataGridView4.Rows

            Dim TRDSYM As String = row.Cells(1).Value
            Dim orderid As String = row.Cells(6).Value
            Dim Ltp As Decimal = row.Cells(2).Value
            Dim EntryPrice As Decimal = Ltp

            'PLACING AN ORDER TO EXCHANGE BASED ON CONDITION
        Next
    Catch ex As Exception

    End Try
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    'SetLog("Market Watch For Ltp Background Worker going on...", LogType.Others)
    BackgroundWorker1.RunWorkerAsync()

End Sub

Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
    'SetLog("Order Placement Algorithm Background Worker going on...", LogType.Others)
    BackgroundWorker2.RunWorkerAsync()
End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted

        If Me.Timer2.Enabled = False Then
            Timer2.Enabled = True
            Me.Timer2.Start()
            Me.btnOrderplacementstatus.Text = "Order Placement Running..."
            Me.btnOrderplacementstatus.BackColor = Color.Green
        End If
        'SetLog("BackgroundWorker 2 Order Placement Thread started...", LogType.Others)
        Me.Timer1.Enabled = True
        Me.Timer1.Start()
        Me.btnMarketwatchstatus.Text = "Market Watch Running..."
        Me.btnMarketwatchstatus.BackColor = Color.Green

    End If
End Sub

Private Sub BackgroundWorker2_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles BackgroundWorker2.RunWorkerCompleted
    If Me.Timer2.Enabled = False Then
        Me.Timer2.Enabled = True
        Me.Timer2.Start()
        Me.btnOrderplacementstatus.Text = "Order Placement Running..."
        Me.btnOrderplacementstatus.BackColor = Color.Green
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...