Avatar billede hadaps Nybegynder
28. december 2004 - 19:01 Der er 5 kommentarer og
1 løsning

progressbar kode

Hej.

Jeg sidder og laver et program, som skal analysere en logfil, som indlæses linie for linie i plain text.
Men når logfilerne bliver et par MB store, kommer det til at tage rimelig lang tid, så jeg søger et stump kode, som jeg kan indsætte så man kan se at der sker noget.
Sådan som det kører lige nu, ser det ud som om programmet fryser, indtil den er færdig med at læse fra filen.
Jeg kan ikke engang bare indsætte andet kode i lykken, for det er somom at den først opdaterer skærmbilledet når den er igennem filen :(

Nogle idéer?

Denne kode bruger jeg til at teste med:
        Dim file As New System.IO.StreamReader("c:\gps.pgl")
        Do While file.Peek() >= 0
            Dim words As String = file.ReadLine()
            count = count + 1

            If words.StartsWith("$GPGGA") = True Then
                TextBox1.Text = TextBox1.Text & vbCrLf & words
            End If
        Loop
        file.Close()
Avatar billede arne_v Ekspert
28. december 2004 - 19:02 #1
Til inspiration:

Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Threading

Public Class MainForm
Inherits Form
    Private bar As ProgressBar
    Private start As Button
    Private abort As Button
    Private t As Thread

    Public Sub New()
        bar = New ProgressBar
        start = New Button
        abort = New Button
        SuspendLayout
        bar.Location = New Point (50, 50)
        bar.Size = New Size (200, 50)
        bar.Name = "Progress Bar"
        bar.Minimum = 0
        bar.Maximum = 60
        bar.Value = 0
        bar.Step = 1
        start.Location = New Point (50, 150)
        start.Size = New Size (200, 50)
        start.Name = "Start Button"
        start.Text = "Start"
        AddHandler start.Click, AddressOf StartClick
        abort.Location = New Point (50, 250)
        abort.Size = New Size (200, 50)
        abort.Name = "Abort Button"
        abort.Text = "Abort"
        AddHandler abort.Click, AddressOf AbortClick
        ClientSize = New Size (300, 350)
        Controls.Add(bar)
        Controls.Add(start)
        Controls.Add(abort)
        Name = "Main Form"
        Text = "Main Form"
        ResumeLayout(False)
    End Sub

    Sub Copy()
        Dim i As Integer = 0
        While i < 60
            bar.Value = i
            Thread.Sleep(1000)
            i = i + 1
        End While
    End Sub

    Sub StartClick(ByVal sender As Object, ByVal e As EventArgs)
        t = New Thread (AddressOf Copy)
        t.Start
    End Sub

    Sub AbortClick(ByVal sender As Object, ByVal e As EventArgs)
        t.Abort
    End Sub

    <STAThread()> _
    Public Shared Sub Main(ByVal args As String())
        Application.Run(New MainForm )
        Application.Exit
        Environment.Exit(0)
    End Sub
End Class
Avatar billede arne_v Ekspert
28. december 2004 - 19:03 #2
Copy skal erstattes af din log analyzer
Avatar billede hadaps Nybegynder
28. december 2004 - 19:11 #3
Ser interessant ud....

er det Thread som egentlig er hele tricket? som er i stand til at pause sin lykke?
Avatar billede arne_v Ekspert
28. december 2004 - 19:13 #4
Det at du kører den tunge operation i en tråd gør at skærm opdateringen virker.
Avatar billede arne_v Ekspert
01. januar 2005 - 12:43 #5
OK ?
Avatar billede hadaps Nybegynder
01. januar 2005 - 12:45 #6
ough...
undskyld... det er kanon..
tak for hjælpen
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