Avatar billede stalle Nybegynder
16. august 2008 - 21:01 Der er 9 kommentarer og
1 løsning

A first chance exception of type 'System.ArgumentException' occur

Jeg har følgende i et program jer har gang i.

1. Jeg læser linierne i en fil, hvor hver linie består af [TEXT];[TEXT]
2. Når alle linier er læst(kommet i et array), splitter dem op ved ";"
3. Resultaterne kommer jeg i en ListView control.

Mit problem er. Det virker "fint" med den første linie jeg har indlæst, og den kommer fint i min ListView.
I anden omgang når den til at splitte linien op, men når den kommer til: BackupList.Items.Add(lstBackup) får jeg en fejl der hedder: A first chance exception of type 'System.ArgumentException' occurred in System.Windows.Forms.dll

Hvis jeg fjerner: BackupList.Items.Add(lstBackup) kan jeg se, at alle linier er blevet fundet i min fil, og de bliver fint splittet.

Jeg skylder at indskyde, at den første linie kommer ganske fint ind i min ListView, men så heller ikke mere.

Håber der er nogen der kan komme med et bud på hvor problemet ligger.

    For Each strLine In arrLines
      Debug.Print("For each")
      arrLine = Split(strLine, ";")
      'Debug.Print("String Splittet")
      lstBackup.Text = arrLine(0)
      Debug.Print(arrLine(0))
      lstBackup.SubItems.Add(arrLine(1))
      Debug.Print(arrLine(1))
      BackupList.Items.Add(lstBackup)
      Debug.Print("Liste lavet")
    Next strLine
Avatar billede erikjacobsen Ekspert
16. august 2008 - 21:03 #1
Du kører ikke GUI-en (med listview) i sin egen tråd? ... eller rettere din læsning af fil osv i en ny tråd?
Avatar billede stalle Nybegynder
16. august 2008 - 22:00 #2
erikjacobsen - Lige det du siger der, er jeg ikke med på hvad du mener med?
Avatar billede stalle Nybegynder
16. august 2008 - 22:00 #3
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim BackupDef As String = "J:\archive\backupDef.txt"
    Dim oRead As System.IO.StreamReader
    Dim strLine As String
    Dim arrLines() As String = Nothing
    Dim arrLine() As String
    Dim noLine As Integer
    Dim lstBackup As ListViewItem = New ListViewItem()


    oRead = System.IO.File.OpenText(BackupDef)

    noLine = 0
    While oRead.Peek <> -1
      ReDim Preserve arrLines(noLine)
      strLine = oRead.ReadLine()
      arrLines(noLine) = strLine
      noLine = noLine + 1
    End While


    noLine = 0
    For Each strLine In arrLines
      Debug.Print("For each")
      arrLine = Split(strLine, ";")
      'Debug.Print("String Splittet")
      lstBackup.Text = arrLine(0)
      Debug.Print(arrLine(0))
      lstBackup.SubItems.Add(arrLine(1))
      Debug.Print(arrLine(1))
      BackupList.Items.Add(lstBackup)
      Debug.Print("Liste lavet")
    Next strLine

    'BackupList.Items.Add(lstBackup)
    Debug.Print("Fil lukket")
    oRead.Close()
  End Sub
Avatar billede erikjacobsen Ekspert
16. august 2008 - 22:24 #4
Der er et eksempel her: http://www.java2s.com/Tutorial/VB/0260__GUI/DemonstratesusingthreadsinaGUI.htm
Der er en del skrivearbejde for at komme i gang, men du får en responsiv brugergrænseflade.
Avatar billede stalle Nybegynder
16. august 2008 - 23:14 #5
Som jeg lige ser det, så er det temmeligt meget overkill til den opgave jeg forsøger at løse.
Avatar billede stalle Nybegynder
16. august 2008 - 23:25 #6
Okay, jeg har så stirret mig blind på det, og kommer i tanke om at jeg før har lavet noget lignende.
Årsagen er at jeg ikke opretter en ListViewItem hvor hver gang.

Løsningen, der virker:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim BackupDef As String = "J:\archive\backupDef.txt"
    Dim oRead As System.IO.StreamReader
    Dim arrLine() As String
    Dim lstBackup As ListViewItem


    oRead = System.IO.File.OpenText(BackupDef)


    While oRead.Peek <> -1
      lstBackup = New ListViewItem
      arrLine = Split(oRead.ReadLine(), ";")

      lstBackup.Text = arrLine(0)
      lstBackup.SubItems.Add(arrLine(1))

      BackupList.Items.Add(lstBackup)
    End While

    Debug.Print("Fil lukket")
    oRead.Close()
  End Sub


Og så blev koden pludseligt mindre...
Avatar billede erikjacobsen Ekspert
17. august 2008 - 08:03 #7
He he, den så jeg ikke, men det er en klassiker. Så må du en anden gang kigge på tråde i GUI-er - kan godt være mit link var en kende kompliceret, men det anbefales.
Avatar billede stalle Nybegynder
17. august 2008 - 12:19 #8
Nej, det er ikke altid man lige ser det åbenlyse :)

Hvad angår tråde i GUI'er, så skal jeg ikke udelukke at det da senere vil blive noget jeg kommer til at kigge på.
For det ikke skal være løgn, har jeg faktisk tidligere set den side i min søgen efter en løsning.
Hvis du vil have point, skal du bare smide et svar.
Avatar billede erikjacobsen Ekspert
17. august 2008 - 12:22 #9
Nej tak, jeg samler slet ikke. Svar selv, accepter dit eget svar.
Avatar billede stalle Nybegynder
17. august 2008 - 14:34 #10
Okay - men tak for input under alle omstændigheder
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB