Avatar billede madssch Nybegynder
08. marts 2006 - 12:18 Der er 8 kommentarer og
1 løsning

Afvikle sub med tidsinterval

Hej Eksperter!

Jeg skal bruge en funktion, som kan afvikle en given Sub med et bestemt tidsinterval.

Da jeg er sprit ny i VB.NET vil en kodestump ikke være af vejen!

På forhånd tak!
Avatar billede bernhof Nybegynder
08. marts 2006 - 12:23 #1
Helt simpelt kan du placere en Timer på din form.

Sæt Interval-egenskaben til dit tidsinterval (i millisekunder).

Enabled-egenskaben bestemmer, om Timeren står og kører, og for hver gang intervallet nås, kaldes Timerens Tick-event. Heri kan du lave et kald til din subrutine:

  Private Sub Timer1_Tick(ByVal sender As Object, _
                          ByVal e As EventArgs) _
                          Handles Timer1.Tick
    MySub()
  End Sub
Avatar billede madssch Nybegynder
08. marts 2006 - 12:31 #2
Det lyder jo meget rigtigt.

Skal timeren første gang kaldes af formens load-event, eller..?
Avatar billede madssch Nybegynder
08. marts 2006 - 12:43 #3
Øh, det virker sådan set fint nu...

Altså måske lige bortset fra, at min applikation går kold, når timeren er kørt første gang..?

:)
Avatar billede bernhof Nybegynder
08. marts 2006 - 13:05 #4
Du kan sætte Enabled egenskaben til at være True i designeren. Derved begynder timeren automatisk at køre så snart formen loades. Alternativt kan du, som du nævner, sætte Enabled = True i Form_Load.

Jeg forstår ikke lige hvorfor din applikation går kold. Det må have noget med din subrutine at gøre. Har du prøvet at debugge?
Avatar billede madssch Nybegynder
08. marts 2006 - 13:10 #5
Har fået selve timeren til at køre - selvfølgelig ved at sætte Enabled til True i designeren.

Scenariet er som følger:

Med et tidsinterval laver jeg en HTTPRequest, som downloader en fil. Hvis filen allerede eksisterer på klienten, får jeg er fejl. Herefter går applikationen kold.

Jeg skal have fundet en måde hvorpå den får at vide, at den må overskrive filen.
Avatar billede bernhof Nybegynder
08. marts 2006 - 13:21 #6
Kan du vise mig koden, som skriver til filen?
Avatar billede madssch Nybegynder
08. marts 2006 - 13:30 #7
Public Sub Download()

        Try

            Dim WebURL As String = "http://www.directit.dk/gfx/brugerupload/documents/"
            Dim FileName As String = "vsnet.doc"
            Dim Request As HttpWebRequest = CType(WebRequest.Create(WebURL & FileName), HttpWebRequest)
            Dim Response As HttpWebResponse = CType(Request.GetResponse, HttpWebResponse)
            Dim DateLastModified As DateTime = Response.LastModified
            Dim TotalFileSize As Long = Response.ContentLength
            Dim InStream As Stream = Response.GetResponseStream
            Dim OutStream As Stream = New FileStream(FileName, FileMode.CreateNew, FileAccess.Write)
            Dim ElapsedTimeCounter As New Stopwatch()
            Dim b(1000) As Byte
            Dim n As Integer

            n = InStream.Read(b, 0, b.Length)

            ElapsedTimeCounter.Start()


            While (n > 0)

                OutStream.Write(b, 0, n)
                n = InStream.Read(b, 0, b.Length)

                ToggleStatusStrip(((OutStream.Length * 100) / TotalFileSize), OutStream.Length, TotalFileSize)

            End While


            ElapsedTimeCounter.Stop()

            OutStream.Close()
            InStream.Close()
            Response.Close()

        Catch ex As Exception

            MessageBox.Show(ex.Message.ToString(), "Fejlbesked", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub


    Public Sub ToggleStatusStrip(ByVal DownloadPercent As Integer, ByVal CurrentFileSize As Integer, ByVal TotalFileSize As Integer)

        If DownloadPercent <= 100 Then

            ToolStripProgressBar.Value = DownloadPercent

            Me.ToolStripStatusLabel.Text = Math.Round((CurrentFileSize / 1024), 0) & " kb af " & Math.Round((TotalFileSize / 1024), 0) & " kb hentet"

        End If

        If CurrentFileSize = TotalFileSize Then

            ToolStripProgressBar.Value = ToolStripProgressBar.Minimum

            Me.ToolStripStatusLabel.Text = "Udført"

        End If

    End Sub
Avatar billede bernhof Nybegynder
08. marts 2006 - 13:34 #8
Dim OutStream As Stream = New FileStream(FileName, FileMode.CreateNew, FileAccess.Write)


Ovenstående linie skal ændres til:

  Dim OutStream As Stream = New FileStream(FileName, FileMode.Create, FileAccess.Write)


Forskellen på FileMode.Create og FileMode.CreateNew er:
- CreateNew opretter en ny fil, men kun hvis den ikke eksisterer i forvejen.
- Create opretter en ny fil hver gang, og overskriver en eventuelt eksisterende fil.
Avatar billede madssch Nybegynder
08. marts 2006 - 13:39 #9
Jamen det er jo fantastisk!  ;-)
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