У меня есть класс, написанный на C #. В нем я хочу запустить определенную функцию параллельно в списке. После того, как он завершится для каждого элемента, я хотел бы обновить индикатор выполнения. Тем не менее, я получаю очень странное поведение от моей программы. Он выполняет событие и достигает моего сабвуфера, но никогда не приступает к выполнению кода. Вместо этого он просто зависает. (Я смешал vb.net и c #. В какой-то момент он будет переписан)
поэтому в моем окне я звоню
progressBar.Visible = True
progressBar.Value = 0
progressBar.Maximum = dataGrid.SelectedRows.Count
AddHandler quoteManager.refreshStarted, AddressOf progressBarCounter
quoteManager.refreshAllAsync(list)
и событие просто
Private Sub progressBarCounter()
Me.Invoke(Sub()
If progressBar.Value = progressBar.Maximum Then
progressBar.Visible = False
Else
progressBar.Value += 1
End If
End Sub)
End Sub
и в классе менеджера котировок я определил это.
public event Action refreshStarted;
public void refreshAllAsync(List<BindableQuote> bindableQuotes)
{
bindableQuotes.AsParallel()
.WithDegreeOfParallelism(10)
.ForAll((quote) => {
quote.refreshAll();
if (refreshStarted != null) { refreshStarted(); }
});
}
Так что по какой-то причине я получаю его для ввода progressBarCounter для каждого элемента в списке, но он никогда не существует. Вместо этого он просто сохраняет форму замороженной.