Avatar billede weis Nybegynder
22. april 2007 - 19:46 Der er 9 kommentarer og
1 løsning

udføre ting i baggrunden lige fra program start

jeg mangler en måde hvorpå jeg kan udføre nogle aktiviteter i baggrunden af mit program lige fra det bliver startet. Det skal være sådan at når den starter så modtager den et antal sekunder, når den tid er gået skal den udføre nogle funktioner hvor der så kommer et nyt antal sekunder der skal gå inden den udfør de samme funktioner igen og sådan skal det bare blive ved.

Hvordan gøre det?
Avatar billede arne_v Ekspert
22. april 2007 - 19:47 #1
starte en tråd måske
Avatar billede weis Nybegynder
22. april 2007 - 20:40 #2
okay... hvordan virker det?
Avatar billede iluka Nybegynder
22. april 2007 - 21:20 #3
private bool abort = false;

Public static void threadMethod()
{
  while (!abort)
  {
    System.Console.WriteLine("running like hell");
  }
}

public static void Main(String []args)
{
  Thread MyThread = new Thread(new ThreadStart(MyCallbackFunction));
  MyThread.Start();
  Thread.Sleep(1000);
  this.abort = true;
}

Ok det er simpelt og der er mange ting at kigge på med tråde, SÆRLIGT synkronisering(mutex, semaforer etc). Det er vigtigt at forstå hvordan tråde opfører sig. Lad være med at bruge Thread.Suspend og Thread.Abort, da du ikke har NOGEN mulighed for at forudsige hvor i koden tråden er. Det kan potentielt skabe deadlocks. Hvis du har brug for andet end bare at starte en tråd, så læs på noget multiprogrammering så du ikke laver ulykker.

God fornøjelse, og bare spørg :)
Avatar billede iluka Nybegynder
22. april 2007 - 21:21 #4
Crap!

Jeg copy pastede lidt og lavede en fejl... sorry :)

Thread MyThread = new Thread(new ThreadStart(MyCallbackFunction));

Skulle have været
Thread MyThread = new Thread(new ThreadStart(threadMethod));

Sorry again
Avatar billede iluka Nybegynder
22. april 2007 - 21:38 #5
Og lidt forklarring er vel egentligt på sin plads

Thread MyThread = new Thread(new ThreadStart(threadMethod));
Opret en tråd der starter med at afvikle "threadMethod". Når metoden returner stopper tråden

MyThread.Start();
Starter selve tråden

Thread.Sleep(1000);
Sæt hovedtråden til at sove et sekundt, så vores nye tråd får en chance for at køre lidt.

this.abort=true;
Tjaa når vores nye tråd skal jo stoppe på et tidspunkt.
Avatar billede weis Nybegynder
22. april 2007 - 21:56 #6
nu har jeg prøvet at lave det i en WinForm, men kan ikke få det til at virke. Det jeg kunne få den til at udføre noget en gang og så ikke mere, men den fik mit program til at køre meget langsom, og jeg tænkte konstant!
Avatar billede iluka Nybegynder
23. april 2007 - 10:34 #7
At det kører meget langsomt skyldes sandsynligvis at while(!abort){...} kører konstant. Hvis du vil have det til at slappe lidt af kunne det tænkes at Thread.Sleep(1000) inde i løkken var en ide.

Ved ikke hvorfor den kun gør det en gang. Prøv at debugge lidt, du kan sagtens bruge breakpoints i tråde. Du skal naturligvis ikke bruge this.abort = true før du er færdig.
Avatar billede weis Nybegynder
23. april 2007 - 17:18 #8
jeg har fået løst det nu, var kommet til at lave en uendelig løkke i min main, men det virker perfekt nu, så du må gerne komme med et svar, takker for hjælpen!
Avatar billede weis Nybegynder
24. april 2007 - 11:51 #9
Jeg har lige et spørgsmål mere til tråde, kan jeg sende fx. en string ind i tråden så den kan arbejde med den?
Avatar billede iluka Nybegynder
24. april 2007 - 11:58 #10
Det smarteste er at lave en klasse med en "tråd metode". Når du så skal starte tråden så laver du en ny instans

MyClass mc = new MyClass("tada");

og bruger MyClass.Run som start method

Thread MyThread = new Thread(new ThreadStart(mc.Run));
MyThread.Start();


public class MyClass
{
  private string myString;

  private bool abort;
  public bool Abort
  {
    set {abort = value;}
  }
 
  public MyClass(string myString)
  {
    this.myString = myString;
  }

  public void Run()
  {
    while (!abort)
    {
      Console.WriteLine(myString);
    }
  }
}

Det er skrevet fra hukommelsen direkte i textboksen her på siden, så hvis der er nogle småfejl så må du undskylde.
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