Я использую 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