Avatar billede droa Novice
13. juni 2009 - 12:22 Der er 11 kommentarer og
1 løsning

Threading i Windows Form

Nu har jeg prøvet lidt på forskellige måder og få en Thread til og køre en metode fra en dll fil af

MoodLib.dll (udpluk og samlet version)

namespace MoodLib
{
    public class Mood
    {
        private int i;

        public void RunMood()
        {
            while (true)
            {
                this.i = this.i - 0.1;
                Thread.Sleep(1);
            }
        }

        public double GetMood()
        {
            return this.i;
        }
}
}


Metoden er kortet meget af, da min dll har en funktion til og downloade nogen filer, men da programmet tog meget langt tid om og hente det hele ned, ville jeg så have lagt det hele i en Thread, så jeg søgte efter Threading programemring, og fandt kun noget til consol programmer? kan det passe man ikke kan threade i forms?

Mood h = new Mood();
Thread oThread = new Thread(new ThreadStart(h.RunMood));

virkede kun i min program.cs (i Main metoden), men så har jeg problemer og hente min "h" så jeg kan bruge den i min form.cs?

eller er det slamkode og lave threads i program.cs?

på forhånd tak
Avatar billede Syska Mester
13. juni 2009 - 12:29 #1
Hvordan har du lavet det i din winforms ... der burde ikke være nogen problemer ved at bruge threads som du gør i winforms.

Hvad ser koden ud når du opretter den tråd i dit winforms program ?

// ouT
Avatar billede droa Novice
13. juni 2009 - 12:38 #2

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using MoodLib;

namespace LittlePetForm
{
    public partial class Form1 : Form
    {
        IHumør h = new Humør();
        Thread tMood = new Thread(new ThreadStart(h.RunMood));

        public Form1()
        {
            InitializeComponent();
        }

    }
    }


Fejlen er:

Error    1    A field initializer cannot reference the non-static field, method, or property.

Avatar billede Syska Mester
13. juni 2009 - 12:49 #3
Jeg tror ikke du må reference noget du lige har oprettet som et field.

flyt:
tMood = new Thread(new ThreadStart(h.RunMood));
ned til din Form1 constructor.
Avatar billede Syska Mester
13. juni 2009 - 12:53 #4
hmmm ...

Din Mood giver en compile fejl ved mig ... du har nok været ved at klippe lidt for meget :-) ellers også mærkeligt du kan få lov til at cas

Cannot implicitly convert type 'double' to 'int'. An explicit conversion exists (are you missing a cast?)
Avatar billede droa Novice
13. juni 2009 - 12:54 #5
nu virker det :) ej hvor smart, kunne man nærmest tænke sig til og, bare mig der er lidt sløv idag :)

hmm nu hvor der er 200 point på spil, kunne jeg ikke lige spørge dig om 1 ting mere?

vis jeg gerne vil opdatere min progressbar hver gang min (double i) når et heltal?

double i bliver opdateret med 0.1 hvert ryk, med RunMood, og kan hentes med GetMood som en int
Avatar billede droa Novice
13. juni 2009 - 12:56 #6
Jeg har os opdaget samme fejl, jeg ændrede min Metode


        public int GetMood()
        {
            return Convert.ToInt32(this.i);
        }
Avatar billede droa Novice
13. juni 2009 - 12:57 #7
den gad ikke med int.Parse åbenbart
Avatar billede Syska Mester
13. juni 2009 - 13:07 #8
nej, den skal først til en string så ...

Men bare cast den til en int:

(int)(0.1 + i)
Avatar billede droa Novice
13. juni 2009 - 13:18 #9
altså det som RunMood gør, er og forøge i hvert sekundt med 0.1,

GetMood retunere et Heltal af i, da jeg kun skal bruge heltallet

har så fusket lidt nu:


namespace MoodLib
{
    public class Humør: IHumør
    {
        private double i = 0;

        public void RunMood()
        {
            while (i<=99.9)
            {
                this.mood = this.i - 0.1;
                Thread.Sleep(1);
            }
        }
        public int GetMood()
        {
            return int.Parse(this.i.ToString());
        }
}
}


men nok om det, hvordan kan jeg opdatere en progsessbar efter Value fra GetMood?
Avatar billede Syska Mester
13. juni 2009 - 13:23 #10
Det spm er kommet mange gange ..

Søg på Invoke eller InvokeRequrired

og se på:
http://www.eksperten.dk/spm/841436

burde være svar nok ...
Avatar billede droa Novice
13. juni 2009 - 13:25 #11
takker igen, og tak for hjælpen :) ligger du et svar?
Avatar billede Syska Mester
13. juni 2009 - 13:31 #12
I'm here to serve og her kommer 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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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