Du kan sagtens processere filen i en thread. Bruger du .NET 2.0 kan du bruge en BackgroundWorker, det er ret nemt at gå til.
Angående progressbar skal du blot finde størrelsen på filen før du påbegynder processering. Hver gang du har læst én eller et helt antal linier, kan du opdatere en progressbar, idet du med en tæller kan holde styr på hvor mange bytes der er læst. Du skal dog huske at du ikke kan opdatere dit UI fra en anden tråd, til dette formål bruges Invoke metoden på en Control. Hvis du bruger BackgroundWorker, findes der en event der kan bruges til opdatering af progress i UI, jeg kan dog ikke lige huske dens navn - men slå det op på MSDN.
Jeg formoder at BackgroundWorker virker fint med Notepad bare man bruger .NET 2.0
Jeg synes at det er vigtigt at skelne mellem compiler/library funktionalitet og saa ens udviklingsvaerktoej
Visual Studio er vel klart det bedste udviklings vaerktoej til C#, men koden virker jo principielt ogsaa i SharpDevelop, Delphi (hvis Borland har C# i Delphi denne maaned), Notepad eller hulkort
Enig arne, men svarede også bare så folk var bedre rustet til at hjælpe mig.
Jeg har kigget på backgroundworker, og har prøvet at lave et lille windows program som starter en backgroundworker som så skulle skrive i en listbox på min form.
Jeg får her en fejl : cross thread operations ikke tilladt.
i mit log program er jeg nødsaget til at opdarete nogle objecter på baggrund af min fil parsing, er der en løsning på dette
''' <summary> ''' Tell the worker to fire progress changed events, then start it ''' </summary> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
With Me.BackgroundWorker1 .WorkerReportsProgress = True .RunWorkerAsync("C:\temp\bigfile.txt") End With End Sub
''' <summary> ''' This method is where we do the background work. I'm just reading a file as an example. ''' Each time a line is read, we fire a ProgressChanged event and pass the line that was ''' read as an argument. ''' ''' Note that we can't update the UI in the DoWork method, but we can fire events ''' and update the UI in the handler(s) for that event. ''' </summary> Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim filename As String = e.Argument
Using reader As New System.IO.StreamReader(filename) While Not reader.EndOfStream Me.BackgroundWorker1.ReportProgress(0.0, reader.ReadLine()) End While End Using End Sub
''' <summary> ''' You can change UI in the ProgressChanged event ''' </summary> Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged Me.ListBox1.Items.Add(e.UserState) End Sub
''' <summary> ''' You can also update UI in the RunWorkCompletedHandler ''' </summary> Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted MsgBox("Done reading the file!") End Sub
I BackgroundWorker1_ProgressChanged ændrer han på en listbox. Her kan du formodentlig ændre dine objekter.
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.