Avatar billede jens_bach Nybegynder
17. august 2006 - 21:59 Der er 8 kommentarer og
1 løsning

threading, hvordan kan man

Hej ...

jeg har et problem ;) hvordan kan jeg fra en thread gøre nået i en anden thread...

fx lave om i
me.label1.text

jeg for en fejl .. jeg har kikket på google men ikke fundet ud af det ?

Control.Invoke must be used to interact with controls created on a separate thread.
Avatar billede arne_v Ekspert
17. august 2006 - 22:05 #1
Benny Tordrup har lige svaret paa et tilsvarende spoergsmaal i C# kategorien:

http://www.eksperten.dk/spm/726686
Avatar billede jens_bach Nybegynder
17. august 2006 - 22:54 #2
ja jeg har også kikket på den men jeg kan ikke finde ud af og oversætte det ;)
Avatar billede arne_v Ekspert
17. august 2006 - 23:11 #3
det skal jeg nok goere saa

om en 3 timer

ellers proev da en af online converterne som

http://www.developerfusion.co.uk/utilities/convertcsharptovb.aspx
Avatar billede jens_bach Nybegynder
17. august 2006 - 23:17 #4
jeg tro jeg fik iden men

hvad betyder dette på dansk ?
og hvorfor skal fx a være det samme ?

Delegate Sub SetTextCallback(ByVal a As Boolean)
       
Private Sub SafeBarLigBarPlusEn(ByVal a As Boolean)
        If Me.ProgressBar1.InvokeRequired Then
            Dim d As New SetTextCallback(AddressOf SafeBarLigBarPlusEn)

            Me.Invoke(d, New Object() {Me.ProgressBar1.Value = 2})
        Else
            Me.ProgressBar1.Value = Me.ProgressBar1.Value + 1
        End If
Avatar billede arne_v Ekspert
18. august 2006 - 02:27 #5
hvorfor ikke

Delegate Sub SetTextCallback()
     
Private Sub SafeBarLigBarPlusEn()
        If Me.ProgressBar1.InvokeRequired Then
            Dim d As New SetTextCallback(AddressOf SafeBarLigBarPlusEn)

            Me.Invoke(d, New Object() { })
        Else
            Me.ProgressBar1.Value = Me.ProgressBar1.Value + 1
        End If

?
Avatar billede arne_v Ekspert
18. august 2006 - 02:28 #6
hvis du havde sagt progress bar så havde jeg iøvrigt et eksempel på lager:

Imports System
Imports System.Drawing
Imports System.IO
Imports System.Net
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"
        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 ResetBar(ByVal n As Integer)
        bar.Minimum = 0
        bar.Maximum = n
        bar.Value = 0
    End Sub
    Sub UpdateBar(ByVal n As Integer)
        bar.Value = n
    End Sub
    Delegate Sub ResetHandler(ByVal n As Integer)
    Delegate Sub UpdateHandler(ByVal n As Integer)
    Sub Copy()
        Try
        Dim req As HttpWebRequest = CType(WebRequest.Create("http://wasd.vsm.com.au/wasd/htroot913.zip"), HttpWebRequest)
        Dim resp As HttpWebResponse = CType(req.GetResponse, HttpWebResponse)
        Dim tot As Integer = CType(resp.ContentLength, Integer)
        If bar.InvokeRequired Then
            bar.Invoke(New ResetHandler(AddressOf ResetBar), New Object() {tot})
        Else
            ResetBar(tot)
        End If
        Dim f1 As Stream = resp.GetResponseStream
        Dim f2 As Stream = New FileStream("C:\htroot913.zip", FileMode.CreateNew, FileAccess.Write)
        Dim sofar As Integer = 0
        Dim b(1000) As Byte
        Dim n As Integer
        n = f1.Read(b, 0, b.Length)
        While n > 0
            f2.Write(b, 0, n)
            sofar += n
            If bar.InvokeRequired Then
                bar.Invoke(new UpdateHandler(AddressOf UpdateBar), New Object() {sofar})
            Else
                UpdateBar(sofar)
            End If
            n = f1.Read(b, 0, b.Length)
        End While
        f2.Close
        f1.Close
        resp.Close
        Catch ex As Exception
        MessageBox.Show(ex.Message)
        End Try
    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 jens_bach Nybegynder
18. august 2006 - 10:08 #7
takker...

er det ikke her {} det som jeg vil skal stå ?

Dim d As New SetTextCallback(AddressOf SafeBarLigBarPlusEn)
Me.Invoke(d, New Object() { })
Avatar billede arne_v Ekspert
19. august 2006 - 00:20 #8
andet argument til Invoke er de argumenter som den funktion du invoker skal kaldes med
Avatar billede arne_v Ekspert
19. august 2006 - 00:20 #9
og et svar
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