Avatar billede donca Nybegynder
03. december 2005 - 22:21 Der er 18 kommentarer

Oprette en ny Tråd

http://www.eksperten.dk/spm/663806

ville difinere mit sidste spørgsmål som et nyt spørgsmål, håber nogen kan hjælpe
Avatar billede arne_v Ekspert
03. december 2005 - 22:53 #1
eksmempel med ProgressBar og tråd:

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 BarUpdate(ByVal i As Integer)
        bar.Value = i
    End Sub

    Delegate Sub UpdateHandler(ByVal i As Integer)

    Sub Copy()
        Dim i As Integer
        For i = 0 To 59
            If bar.InvokeRequired Then
                bar.Invoke(CType(AddressOf BarUpdate, UpdateHandler), New Object() {i})
            Else
                BarUpdate(i)
            End If
            Thread.Sleep(500)
        Next
    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
03. december 2005 - 22:54 #2
Copy laver ingenting men det kan den ændres til at gøre
Avatar billede donca Nybegynder
03. december 2005 - 23:33 #3
Jeg er lidt forvirret eng. den måde du sender koden på... jeg kan kun skrive kode for hver form.. det ser ud som om, du går længer bag koden.. hvordan gør du det?
Avatar billede arne_v Ekspert
03. december 2005 - 23:55 #4
jeg bruger ikke Visual Studio

men det er heller ikke så vigtigt - du skal bare se teknikken
Avatar billede donca Nybegynder
04. december 2005 - 00:07 #5
ok.. jeg prøver lige at forstå hvad du gør

t er tråden

Du ligger så Copy() i en tråd, og starter den når StartClick() triggers
Du stopper t ved triggering af t.Abort (lukker den også tråden?)


Detter forstår jeg ikke lige så godt

    <STAThread()> _
    Public Shared Sub Main(ByVal args As String())
        Application.Run(New MainForm)
        Application.Exit
        Environment.Exit(0)
    End Sub

er det noget jeg også skal skrive?

eller er det fordi du ikke kore VS.NET?

fordi, efter hvad jeg kan forstå ved det.. er det jeg ikke kan bruge "brugerflade" til at tegne Vinduer?
Avatar billede arne_v Ekspert
04. december 2005 - 00:25 #6
Abort stopper tråden helt

det der er bare mit hoved program
Avatar billede donca Nybegynder
04. december 2005 - 03:13 #7
nu jeg ikke så god til "kode" engelsk

    Sub Copy()
        Dim i As Integer
        For i = 0 To 59
            If bar.InvokeRequired Then
                bar.Invoke(CType(AddressOf BarUpdate, UpdateHandler), New Object() {i})
            Else
                BarUpdate(i)
            End If
            Thread.Sleep(500)
        Next
    End Sub



InvokeRequired (Invoke) er en større del af Copy... hvad tjekker den?
Avatar billede donca Nybegynder
04. december 2005 - 03:22 #8
nu kender jeg kun til thread efter hvad du har lært mig.. så jeg ville lige se om du kunne sige om dette er rigtigt (det virker fint), men om det er sådan du ville gøre :)

    Sub BarUpdate(ByVal i As Integer)
        bar.Value = i
    End Sub

    Sub StatusUpdate(ByVal i As Integer)
        statuslabel.Text = i
    End Sub

    Delegate Sub UpdateHandler(ByVal i As Integer)
    Delegate Sub StatusHandler(ByVal i As Integer)

    Sub Copy()
        Dim i As Integer
        For i = 0 To 100
            If bar.InvokeRequired Then
                bar.Invoke(CType(AddressOf BarUpdate, UpdateHandler), New Object() {i})
                statuslabel.Invoke(CType(AddressOf StatusUpdate, StatusHandler), New Object() {i})
            Else
                BarUpdate(i)
                StatusUpdate(i)
            End If
            Thread.Sleep(100)
        Next
    End Sub
Avatar billede arne_v Ekspert
04. december 2005 - 08:18 #9
det der invoke er nødvendigt hvis controller ikke er thread safe
Avatar billede donca Nybegynder
04. december 2005 - 09:03 #10
jeg har afsat fler point.. vis du ville tjekke det script jeg har lagt op :)

om hvordan det skal skrives, efter det jeg vil med det :)
Avatar billede arne_v Ekspert
04. december 2005 - 20:36 #11
øh

vil du have mit eksempel omskrevet til HTTP download ?

eller ?
Avatar billede donca Nybegynder
04. december 2005 - 23:49 #12
jeg prøver at lære VB.NET fordah threading fungere.. jeg ville se om man kunne opsætte selve (handling) funktionerne på en anden måde
Avatar billede donca Nybegynder
05. december 2005 - 00:12 #13
når jeg skal opdatere 2 ting i main form :)
Avatar billede donca Nybegynder
05. december 2005 - 01:22 #14
kan man måske liggedet ned i en array.. også få den array til at gøre noget på event?
Avatar billede arne_v Ekspert
07. december 2005 - 00:51 #15
jeg forstår ikke

beklager
Avatar billede donca Nybegynder
08. december 2005 - 01:18 #16
jeg vil ændre bar.value og label.text, bægge ved brug af min Funktion den anden tråd køre... _skal_ jeg lave det 2x?



    Sub BarUpdate(ByVal i As Integer)
        bar.Value = i
    End Sub

    Sub StatusUpdate(ByVal i As Integer)
        statuslabel.Text = i
    End Sub

    Delegate Sub UpdateHandler(ByVal i As Integer)
    Delegate Sub StatusHandler(ByVal i As Integer)
Avatar billede bernhof Nybegynder
12. januar 2006 - 13:38 #17
Nu er jeg lige droppet ind fra sidelinien, og har ikke lige tid til at sætte mig ind i dit spørgsmål fra start af, men til dit sidste spørgsmål kan jeg sige, at hvis det er den samme værdi statuslabel.Text og bar.Value skal indeholde, så behøver du kun kalde én metode:

  Sub StatusUpdate(ByVal i As Integer)
    statuslabel.Text = i.ToString()
    bar.Value = i
  End Sub

  Delegate Sub UpdateHandler(ByVal i As Integer)
Avatar billede donca Nybegynder
13. januar 2006 - 13:15 #18
ahh.. brugte ellers bare "int" i min label, siden den omregner, men det kan jo også bare gøres i selve funktionen :)
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