Inquiridor
Importar arquivo texto para datagridview

Pergunta
-
Boa noite.
Estou com problemas com a importação de dados de um arquivo texto e passando essas informações em umdatagridview. A mensagem de erro é:
O CLR não conseguiu fazer a transição do contexto COM 0x1ba2b3a0 para o contexto COM 0x1ba2b5f0 em 60 segundos. O thread que possui o context/apartment de destino está provavelmente fazendo uma espera sem bombeamento ou processando uma operação de execução muito longa sem bombeamento das mensagens do Windows. Geralmente, essa situação tem um impacto negativo no desempenho e pode até mesmo levar à falta de resposta do aplicativo ou ao acúmulo contínuo de uso de memória com o tempo. Para evitar esse problema, todos os threads com um único apartment em thread (STA) devem usar primitivos de espera de bombeamento (como CoWaitForMultipleHandles) e bombear rotineiramente as mensagens durante operações de execução longa.
Abaixo segue codigo que realizei. O arquivo texto possui 139 linhas, e os dados são adicionados em 13 colunas. Toda a informação de cada coluna é separada por " ; ".
Private Sub ImportarLista()
'define as variáveis usadas no projeto
Dim linhaTexto As String = ""
Dim arrrayDeLinhas() As String
Dim ContadorLinhas As Integer
'Carrega as informacoes existente na lista
'cria um novo objeto StreamReader
Dim objReader As New IO.StreamReader(ArquivoLista)
'Inicia a busca do link no arquivo texto e preenche a gridLink
Try
ContadorLinhas = 0
Do While objReader.Peek() <> -1
If ContadorLinhas > 0 Then gridLink.Rows.Add(ContadorLinhas)
linhaTexto = objReader.ReadLine()
arrrayDeLinhas = Split(linhaTexto, ";")
gridLink(0, ContadorLinhas).Value = arrrayDeLinhas(0).ToString
gridLink(1, ContadorLinhas).Value = arrrayDeLinhas(1).ToString
gridLink(2, ContadorLinhas).Value = arrrayDeLinhas(2).ToString
gridLink(3, ContadorLinhas).Value = arrrayDeLinhas(3).ToString
gridLink(4, ContadorLinhas).Value = arrrayDeLinhas(4).ToString
gridLink(5, ContadorLinhas).Value = arrrayDeLinhas(5).ToString
gridLink(6, ContadorLinhas).Value = arrrayDeLinhas(6).ToString
gridLink(7, ContadorLinhas).Value = arrrayDeLinhas(7).ToString
gridLink(8, ContadorLinhas).Value = arrrayDeLinhas(8).ToString
gridLink(9, ContadorLinhas).Value = arrrayDeLinhas(9).ToString
gridLink(10, ContadorLinhas).Value = arrrayDeLinhas(10).ToString
gridLink(11, ContadorLinhas).Value = arrrayDeLinhas(11).ToString
gridLink(12, ContadorLinhas).Value = arrrayDeLinhas(12).ToString
ContadorLinhas = ContadorLinhas + 1
Loop
objReader.Close()
'Apaga as linhas em branco
ContadorLinhas = 0
Do While ContadorLinhas < gridLink.Rows.Count
If gridLink.Rows.Item(ContadorLinhas).Cells(8).Value = "" Then
gridLink.CurrentCell = Nothing
gridLink.Rows(ContadorLinhas).Visible = False
End If
ContadorLinhas = ContadorLinhas + 1
LoopMsgBox("Importação realizada", vbInformation, "Importacao de Lista")
Catch ex As Exception
MsgBox("Não foi possível importar o arquivo texto", vbInformation, "Importacao de Lista")
GoTo TerminoAcao
End Try
TerminoAcao:
End Sub
Carlos Falcao
Todas as Respostas
-
um exemplo que uso para carregar txt delimitado para um datagrid:
Private Sub Carregardatagrid_Click(sender As Object, e As EventArgs) Handles Carregardatagrid.Click
Try
Dim cSeparador As Char
Dim dt As New DataTable
dt.Columns.Add("Data e Hora")
dt.Columns.Add("Usuário")
dt.Columns.Add("Telefone")
dt.Columns.Add("Nome Titular")
dt.Columns.Add("Motivo")
dt.Columns.Add("Descrição do BD")
dt.Columns.Add("Resolvido?")
dt.Columns.Add("reserva1")
dt.Columns.Add("reserva2")
dt.Columns.Add("reserva3")
dt.Columns.Add("reserva4")
Dim srArquivo As New System.IO.StreamReader(historicoUsuario & Environment.UserName & ".txt")
'Exemplo linhas do arquivo com colunas separadas por tab
'1 Valor teste1 Valor xx
'2 Valor teste2 Valor yy
cSeparador = ";" ' colunas separadas por ; pode ser qq outro separdor, exemplo ;
'lendo arquivo e gravando no DataTable
While srArquivo.Peek() <> -1
dt.Rows.Add(srArquivo.ReadLine().Split(cSeparador))
End While
DataGridView1.DataSource = dt
srArquivo.Close()
MsgBox("Leitura efetuada com sucesso!!!", MsgBoxStyle.Information, "Sucesso")
btsalvar.Enabled = True
btexcluir.Enabled = True
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub