#vb.net
Вопрос:
У меня есть backgroundworker для работы с объектами и запросами, но он вызывает делегата для записи в datagridview, но когда я добавляю 1 символ в строку для делегата, он больше не записывает в сетку и вводит me.invokerequired, если я удалю этот символ, он перейдет к другому. Отсюда я звоню делегату
If jsonElemento.cantidad_errores lt;gt; 0 Then If jsonErrores.Count = 0 Then vector = fila("docentry").ToString ";" fila("tipo") ";" " " "i add the char here (;)" jsonElemento.cantidad_errores.ToString gridError(vector) Else vector = fila("docentry").ToString ";" fila("tipo") ";" jsonErrores(0).mensaje_error.ToString ";" jsonElemento.cantidad_errores.ToString gridError(vector) End If End If
А это мой делегат
Public Sub gridError(argumentos As String) If Me.InvokeRequired() Then Me.Invoke(New Action(Of String)(AddressOf gridError), argumentos) Else vector = argumentos.Split(delimitadores, StringSplitOptions.None) If vector.Count = 3 Then DataErrores.Rows.Add(vector(0), vector(1), vector(2)) ElseIf vector.Count = 2 Then DataErrores.Rows.Add(vector(0), " ", vector(1)) End If End If End Sub
Я не могу понять, почему 1 символ имеет такое значение, и у меня та же проблема с вектором if.count = 3
Комментарии:
1. Это не очень хорошая теория. Убедитесь, что событие загрузки сработало перед запуском рабочего, чтобы вы могли быть уверены, что форма инициализировалась сама. И не используйте InvokeRequired, когда вы знаете , что это должно быть правдой, кроме как для создания исключения, указывающего на то, что с формой что-то не так.
2. Я всегда устанавливал
WorkerReportsProgress = true
и использовалReportProgress
метод в bgw для обновления элементов пользовательского интерфейса; он запускаетProgressChanged
событие в потоке пользовательского интерфейса, создавшем работника (который должен быть тем же потоком, который создал вашу сетку), поэтому вызов не требуется. Вы можете передать состояние объекта в ReportProgress