Я пишу серверную программу, которая выполняет некоторые базовые потоки. Необходимо обновить некоторые элементы управления пользовательским интерфейсом, и я узнал, как использовать делегаты, чтобы все было поточно-ориентированным. Например, вот мой делегат, который позволяет мне обновлять элемент управления TextBox из потока:
Private Delegate Sub AddMessageToTXTDelegate(ByVal lst As TextBox, ByVal str1 As String)
Private Sub AddMessageToTXT(ByVal txt As TextBox, ByVal str1 As String)
Try
If Me.InvokeRequired Then
Dim addTXT As New AddMessageToTXTDelegate(AddressOf AddMessageToTXT)
Me.BeginInvoke(addTXT, New Object() {txt, str1})
Else
txt.Text = str1
End If
Catch ex As Exception
Console.WriteLine(ex.Message)
Throw (ex)
End Try
End Sub
Теперь мне нужно обновить счетчик, и я подумал, что тот же шаблон будет применяться. Я собрал следующий делегат:
Private Delegate Sub IncrementCounterDelegate(ByVal ctr As Integer)
Private Sub IncrementCounter(ByVal ctr As Integer)
Try
If Me.InvokeRequired Then
Dim incCtr As New IncrementCounterDelegate(AddressOf IncrementCounter)
Me.BeginInvoke(incCtr, New Object() {ctr})
Else
ctr += 1
End If
Catch ex As Exception
Console.WriteLine(ex.Message)
Throw (ex)
End Try
End Sub
Проблема в том, что мой счетчик не увеличивается. Когда я отслеживаю это с помощью отладки, выполняется оператор «ctr + = 1», но фактический счетчик остается равным нулю. Я думаю, что я должен передать счетчик по ссылке.
Кто-нибудь может дать здесь какой-нибудь совет? Спасибо!
\ CBF