Oppure

Loading
01/10/10 17:53
carmine
Ragazzi ho bisogno di leggere un file txt, e di stampare il suo contenuto in una listview in questo modo:
if (e.KeyCode == Keys.S)
            {
                    StreamReader sr = new StreamReader("C:\file.txt");
                    int i =0;
                    do
                    {
                        line = sr.ReadLine();
                        listView1.Items.Insert(i, line);
                        i++;
                  } while (line != null);
                   sr.Close();
             }

ma quando entra nella funzione si blocca il programma e non mi fa fare + niente!! :S

cosa sbaglio? mi potreste indicare la procedura giusta per far si che riesca nel mio intento?
aaa
01/10/10 19:08
netarrow
La lettura del file dovrebbe essere fatta in un nuovo thread.
aaa
02/10/10 5:24
carmine
mi potresti aiutare xfavore? mi fai un esempio? grazie! :(
aaa
02/10/10 8:03
Il Totem
Non puoi usare un nuovo thread perché dovresti accedere alla ListView da quel thread, generando un'eccezione CrossThreadOperationException: per risolverla dovresti parafrasare il codice con almeno un paio di invocazioni a delegati.
In questo caso, paradossalmente, è meglio un Application.DoEvents.
msdn.microsoft.com/it-it/library/…(VS.80).aspx

Puoi al massimo separare solo la lettura del file in un thread diverso, ma quello che prende più tempo in questo codice è l'aggiunta dell'elemento alla ListView, non la ReadLine in sé.
aaa
02/10/10 9:12
Ultimo

Come sugerito da Totem


   1.
      if (e.KeyCode == Keys.S)
   2.
                  {
   3.
                          StreamReader sr = new StreamReader("C:\file.txt");
   4.
                          int i =0;
   5.
                          do
   6.
                          {
   7.
                              line = sr.ReadLine();
   8.
                              listView1.Items.Insert(i, line);
   9.
                              i++;

  10.                       Application.DoEvents  

                        } while (line != null);
  11.
                         sr.Close();
  12.
                   }
If ok Then GOTO Avanza else GOTO Inizia

02/10/10 10:49
carmine
ragazzi ho provato! così:
if (e.KeyCode == Keys.S)
            {
                leggi();
            }
        }

        private void leggi()
        {
            StreamReader sr = new StreamReader("C:\file.txt");
            int i = 0;
            do
            {
                line = sr.ReadLine();
                listView1.Items.Insert(i, line);
                i++;
                Application.DoEvents();
            } while (line != null);
            
            sr.Close();

        }



ma il programma si blocca e non mi fa nemmeno uscire!! qual'è il problema?
aaa
02/10/10 11:48
dedalux
Ciao, con VB io farei cosi

    Public Sub CaricaFile(ByVal path As String)

        If IO.File.Exists(path) = True Then
            On Error Resume Next
            Using sr As New System.IO.StreamReader(path, System.Text.Encoding.GetEncoding(1252))
                Dim p As Boolean = True
                Form1.Lista.Items.Clear()
                While sr.Peek() <> -1
                    Dim l() As String = sr.ReadLine().Split(vbTab)
                    Dim b As Boolean = True
                    Dim lvi As ListViewItem = Nothing
                    For Each s As String In l
                        If b Then
                            lvi = New ListViewItem(s)
                            b = False
                        Else
                            lvi.SubItems.Add(s)
                        End If
                        Application.DoEvents()
                    Next
                    If p = False Then
                        Form1.Lista.Items.Add(lvi)
                    Else
                        p = False
                    End If
                End While
            End Using
        End If
    End Sub


nota che così gli fai salvare anche gli headers delle colonne
:k:
Ultima modifica effettuata da dedalux 02/10/10 11:50
aaa
02/10/10 12:36
carmine
ragazzi una volta inserito nella listview come faccio ad inserire nelle varie colonne???
aaa