Avatar billede skurggman Nybegynder
05. januar 2006 - 16:32 Der er 11 kommentarer og
1 løsning

Starte metoder med argumenter som tråde

Hej

Hvordan starter jeg metoden public void x(int y, int z){} som en tråd?

/Kim Schurmann
Avatar billede innercitydk Nybegynder
05. januar 2006 - 16:50 #1
LAv f.eks en klasse med metoden i

using System;
using System.Threading;
Namespace Threadingeks
{
public class Threadingtest
{
  public void x(int y, int z)
  {
      while (true)
      {
        //kode der skal udføres mens thread kører
      }
  }
}

public class Mainklasse
{
  public static int Main()
  {
    Threadingtest  thr = new Threadingtest();
      Thread oThread = new Thread(new ThreadStart(Threadingtest.x(5,5));
      oThread.Start();
      while (!oThread.IsAlive);
      Thread.Sleep(1);
      oThread.Abort();
      oThread.Join();
  }
}
}
Avatar billede innercitydk Nybegynder
05. januar 2006 - 16:52 #2
Det er denne tutorial fra msdn jeg har skrevet lidt om:

http://msdn.microsoft.com/library/?url=/library/en-us/csref/html/vcwlkthreadingtutorial.asp

Vh Nicki
Avatar billede innercitydk Nybegynder
05. januar 2006 - 16:54 #3
en lille rettelse:

Thread oThread = new Thread(new ThreadStart(Threadingtest.x(5,5));

skulle have været

Thread oThread = new Thread(new ThreadStart(thr.x(5,5));
Avatar billede innercitydk Nybegynder
05. januar 2006 - 16:57 #4
oThread.Join(); kan du også godt undlade
Avatar billede skurggman Nybegynder
05. januar 2006 - 16:58 #5
Kan det ikke lade sig gøre uden at lave en klasse til det? Det skal det helst nemlig :)
Avatar billede innercitydk Nybegynder
05. januar 2006 - 17:00 #6
Prøv det her

  public static int Main()
  {
      Thread oThread = new Thread(new ThreadStart(x(5,5));
      oThread.Start();
      while (!oThread.IsAlive);
      Thread.Sleep(1);
      oThread.Abort();
  }
public static void x(int y, int z)
{
//kode der skal udføres
}
Avatar billede skurggman Nybegynder
05. januar 2006 - 17:42 #7
Den siger at ThreadStart forventer et metodenavn... Altså ikke en x og ikke x(5,5), men hvis man gør det, så siger den at metoden x ikke er overskrevet med en der ikke tager argumenter...
Avatar billede arne_v Ekspert
05. januar 2006 - 17:49 #8
jeg har altid gjordet det samme i C# som jeg altid har gjordt i Java

lave en instans af et objekt, kalde constructoren med de argumenter
jeg skal bruge, lade constructor gemme dem i instans variable, starte
tråd på en metode uden argumenter, den metode bruger så instans variablene

det virker ihvertfald
Avatar billede arne_v Ekspert
05. januar 2006 - 17:51 #9
tilfældigt eksempel fra lageret:

        TcpClient client = new TcpClient("localhost", 50000);
        (new Thread(new ThreadStart((new Reader(client)).Run))).Start();
...
class Reader
{
    private StreamReader rdr;
    public Reader(TcpClient cli)
    {
        rdr = new StreamReader(cli.GetStream());
    }
    public void Run()
    {
        try
        {
            string line;
            while((line = rdr.ReadLine()) != null)
            {
                Console.WriteLine(line);
            }
        }
        catch(Exception)
        {
            // nothing
        }
    }
}
Avatar billede skurggman Nybegynder
05. januar 2006 - 17:53 #10
Ja det gør det, men det er desværre ikke umiddelbart en option lige nu og her, fordi jeg stadig har de progressbarer der skal tages højde for som jeg snakkede om i går i "Cross Threading" - og jeg ville være lidt ked af at flytte de metoder nu :( Men det kan selvfølgelig blive sidste udvej...

Kan bare ikke forstå hvorfor det ikke er muligt at starte en metode med argumenter som en tråd, når det nu er muligt at starte en metode uden argumenter.
Avatar billede skurggman Nybegynder
05. januar 2006 - 18:01 #11
Kan det være fordi man skal bruge delegates? I så fald, hvordan bruger jeg det?
Avatar billede skurggman Nybegynder
05. januar 2006 - 18:13 #12
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

IT-JOB