Avatar billede MasterException Nybegynder
23. september 2009 - 12:13 Der er 4 kommentarer og
1 løsning

Thread køre kun en gang

hej jeg sidder med et lille problem, det er som om at min tråd kun køre engang, og ikke kan startes igen, jeg har vedhæftet min kode, for ved ikke om jeg gør noget helt grundlæggende fejl

Thread SavePicThread = new Thread(new ThreadStart(SaveStreamToHD));

private void Fx(){
  if (RecorderList.Count > 10)
  {
    if (!SavePicThread.IsAlive)
    {
        SavePicThread.Start();
    }
  }
}

private static void SaveStreamToHD()
{
    //code
    //RecorderList.claer()
}
Avatar billede MasterException Nybegynder
23. september 2009 - 12:19 #1
glemte at nævne at fx() er tilmeldt et event som bliver invoket et andet sted fra, hvis det har nogen indflydelse

Picture.Resized += new System.EventHandler(Fx);
Avatar billede sirius Nybegynder
23. september 2009 - 12:56 #2
Altså problemet er at anden gang eventet bliver invoket så bliver din tråd ikke startet?

Hvis ja kan du eventuelt prøve med:

private void Fx(){
  if (RecorderList.Count > 10)
  {
    Thread SavePicThread = new Thread(new ThreadStart(SaveStreamToHD));
    SavePicThread.Start();
  }
}

private static void SaveStreamToHD()
{
    //code
    //RecorderList.claer()
}
Avatar billede MasterException Nybegynder
23. september 2009 - 13:09 #3
ja det har jeg også prøvet og det ser ud til at virke, men hvordan laver jeg så et tjek på at SavePicThread ikke køre på sammen tid ,altså i to el flere tråde nu når man new en ny tråd hele tiden. fordi der kan køre flere på sammen tid så er der noget IO der går galt
Avatar billede bvli Praktikant
23. september 2009 - 14:21 #4
Du kunne lave en kø, og så lade din tråd hente jobs fra køen, og når den er tom, vente på at der kommer et nyt job ind.
Avatar billede c0ld1mp Nybegynder
06. oktober 2009 - 09:12 #5
Brug lock funktioenen, så kan et thread ikke komme til før, en anden thread er færdig

private void Fx(){
  if (RecorderList.Count > 10)
  {
    Thread SavePicThread = new Thread(new ThreadStart(SaveStreamToHD));
    SavePicThread.Start();
  }
}

private static void SaveStreamToHD()
{
    Lock(this){
      //code
      //RecorderList.claer()
    }
}
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

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