Avatar billede japping Nybegynder
07. januar 2012 - 13:04 Der er 5 kommentarer

Skal jeg bruge VB.NET Thread eller kan det gøres lettere ?

Jeg arbejder på et program der skal udføre nogle beregninger, men brugeren skal have muligheden for at stoppe beregningerne.

Jeg regner med at skulle bruge en tråd/Thread for at beregningene kan stoppe når brugeren trykker på en knap. Er det korrekt ?

Jeg har forsøgt mig med programmering af tråde ud fra denne vejledning, men jeg kan ikke få det til at virke: http://127.0.0.1:47873/help/1-5296/ms.help?product=VS&productVersion=100&method=f1&query=EHInvalidOperation.WinForms.IllegalCrossThreadCall&locale=en-US&category=DevLang%3aVB%00TargetFrameworkMoniker%3a.NETFramework,Version%3Dv4.0

Jeg har forsøgt mig med det sidste eksempel men får følgende 2 fejl:

Error    1    'Protected Overrides Sub Dispose(disposing As Boolean)' has multiple definitions with identical signatures.    C:\Data\Privat\Projects\VB.NET\Thread\Thread\Thread\Form1.Designer.vb    7    29    Thread

Error    2    'components' is already declared as 'Private components As System.ComponentModel.IContainer' in this class.    C:\Data\Privat\Projects\VB.NET\Thread\Thread\Thread\Form1.vb    26    13    Thread


Det vil være dejligt hvis der er en, der kan hjælpe mig med et simpelt tråd-eksempel eller rette fejlene i eksemplet, så jeg kan lære hvordan man styrer en tråd ?
Avatar billede arne_v Ekspert
07. januar 2012 - 22:12 #1
Eksempel:

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

Public Class MainForm
    Inherits Form
    Private math As Label
    Private start As Button
    Private abort As Button
    Private t As Thread

    Public Sub New()
        math = New Label()
        start = New Button()
        abort = New Button()
        SuspendLayout()
        math.Location = New Point(50, 50)
        math.Size = New Size(300, 50)
        math.Font = New Font(FontFamily.GenericSerif, 16F)
        start.Location = New Point(50, 150)
        start.Size = New Size(200, 50)
        start.Text = "Start calculations"
        AddHandler start.Click, AddressOf StartClick
        abort.Location = New Point(50, 250)
        abort.Size = New Size(200, 50)
        abort.Text = "Abort calculations"
        AddHandler abort.Click, AddressOf AbortClick
        ClientSize = New Size(400, 350)
        Controls.Add(math)
        Controls.Add(start)
        Controls.Add(abort)
        Name = "Main Form"
        Text = "Main Form"
        ResumeLayout(False)
    End Sub
    Public Sub Run()
        While True
            If math.InvokeRequired Then
                math.Invoke(DirectCast(Sub() math.Text = NewCalc(), Action))
            Else
                math.Text = NewCalc()
            End If
            Thread.Sleep(2000)
        End While
    End Sub
    Private Shared rng As Random = New Random()
    Private Function NewCalc() As String
        Dim v1 As Integer = rng.Next(1000)
        Dim v2 As Integer = rng.Next(1000)
        NewCalc = String.Format("{0} + {1} = {2}", v1, v2, v1+v2)
    End Function
    Public Sub StartClick(sender As Object, e As EventArgs)
        t = New Thread(AddressOf Run)
        t.Start()
    End Sub
    Public Sub AbortClick(sender As Object, e As EventArgs)
        t.Abort()
    End Sub
    <STAThread> _
    Public Shared Sub Main(args As String())
        Application.Run(New MainForm())
        Application.Exit()
        Environment.Exit(0)
    End Sub
End Class
Avatar billede japping Nybegynder
09. januar 2012 - 19:49 #2
Jeg kan umiddelbart ikke kopiere det ind i et projekt, men jeg ser lige, om jeg kan få det til at virke.
Avatar billede arne_v Ekspert
10. januar 2012 - 02:10 #3
command line:

vbc /r:System.Windows.dll /r:System.Drawing.dll noget.vb

burde virke.
Avatar billede japping Nybegynder
22. februar 2014 - 08:22 #4
Hej Arne,
Læg et svar til dette gamle spørgsmål, så jeg kan lukke det.

Tak for hjælpen.
Avatar billede japping Nybegynder
05. november 2014 - 07:57 #5
Hej Arne,
Du har aldrig fået point for dit svar, vil du lægge et svar til pointgivning ?
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