Avatar billede hald. Nybegynder
09. november 2004 - 20:04 Der er 17 kommentarer

Er det muligt at anvende tråde i Pocket PC App?

Umiddelbart er System.Threading namespacet tilgængeligt, men jeg synes at der "mangler" en hel del metoder, så nu er jeg så småt begyndt at tvivle om det overhovedet er muligt...
Avatar billede arne_v Ekspert
09. november 2004 - 20:10 #1
Thread class Start method er i CF så monstro ikke ...
Avatar billede hald. Nybegynder
09. november 2004 - 20:17 #2
ved det,...men hvis jeg prøve med noget så simpelt som at vise System.DataTime.Now på en Label, kan jeg ikke lige få det til at spille...

og den godtager eksempelvis ikke "thread.IsBackground", men det er jo også multithreading, så kan det være der den står af ?
Avatar billede hald. Nybegynder
09. november 2004 - 20:19 #3
"men hvis jeg prøve med noget så simpelt som at vise System.DataTime.Now på en Label, kan jeg ikke lige få det til at spille..."

...er selvfølgelig i sin egen tråd
Avatar billede arne_v Ekspert
09. november 2004 - 20:29 #4
Forskellen på baggrund og forgrund giver vel ingen mening på CE !?
Avatar billede arne_v Ekspert
09. november 2004 - 20:30 #5
Med hensyn til at vise now i Label, så skal du nok poste noget kode.

Så er det muligt at en som ved noget om CF (ikke mig !) kan hjælpe.
Avatar billede hald. Nybegynder
09. november 2004 - 20:38 #6
Ok, Arne.. Men hvorfor skulle det ikke give mening at lave en background-tråd? Er der noget jeg ikke ved om CE mht. processerne - teach me ;o)
Avatar billede hald. Nybegynder
09. november 2004 - 21:36 #7
(er forholdsvis ny til CF)
Avatar billede hald. Nybegynder
09. november 2004 - 22:52 #8
Hmm... Nogen der kan se hvorfor denne (meget simple) kode ikke virker:

private void butStart_Click(object sender, System.EventArgs e)
{
    Thread thisThread = Thread.CurrentThread;
    thisThread.Name = "Main thread";
                   
    ThreadStart workerStart = new ThreadStart(DisplayNumbers);
    Thread workerThread = new Thread(workerStart);
    workerThread.Name = "Worker thread";

    workerThread.Start();

    DisplayNumbers();
    this.lblWorkStatus.Text += "Main Thread has finished.\n";


           
}


private void DisplayNumbers()
{
    Thread thisThread = Thread.CurrentThread;
   
    for(int i = 1; i < 8; i++)
    {
        if(i%1 == 0)
            this.lblWorkStatus.Text += System.DateTime.Now.ToString("ss")+ ", has reached " +i + "\n";
        Thread.Sleep(500);
       
    }
}

skal såmænd bare have begge tråde til at arbejde, men desværre går min simulator kold, når jeg prøver kører eksemplet??? Der er ingen problemer hvis det køres som en normal win app.

nogen ideer om hvordan jeg kan arbejde med flere tråde ??
Avatar billede arne_v Ekspert
09. november 2004 - 22:57 #9
Jeg ved ikke meget om CE, men jeg har en iPAQ med PocketPC 2003 og
når terminate application er noget man gør under "free memory", så kan jeg ikke
rigtigt forestille mig foreground threads holde applikationen i memory.

Lidt googling antyder faktisk at man kan skelne mellem foreground og background
threads.
Avatar billede hald. Nybegynder
09. november 2004 - 23:06 #10
ja,..fatter ikke helt hvorfor man som bruger selv skal sørge for at frigøre hukommelsen under "free memory", men det har vel et formål - i guess.

jeg har selv søgt og søgt,..man jeg har desværre ikke fundet ud af hvordan jeg fikser det endnu
Avatar billede lifo Nybegynder
10. november 2004 - 07:43 #11
nu kender jeg ikke noget som helst til CF
så jeg ved ikke om dette overhoved er relevant
jeg forstår heller ikke helt hvad du gør med denne linje
Thread thisThread = Thread.CurrentThread;

men når man arbejder med win app og tråde kan man ikke opdatere noget på gui tråden fra en anden tråd 
man bliver nødt til at kalde Invoke eller BeginInvoke
kan være at det har noget med det at gøre

ps. jeg ved at nogle gange så fungerer det alligevel i win app at opdatere fra en anden tråd  men det er ikke den rigtige måde at gøre det på
Avatar billede hald. Nybegynder
10. november 2004 - 15:25 #12
jeg bruger sådan set heller ikke linien til noget der (kan jeg se)... men har brugt den til at få fat i navnet på tråden.

Mht. invoke, tænker du på noget alá:
lblWorkStatus.Invoke(<mit delegate>, new object[] {DateTime.Now.ToString(format) });

...ellers må du godt lige smide et lille eksempel, hvis du har tid og lyst.
Avatar billede lifo Nybegynder
10. november 2004 - 17:23 #13
ja det var det jeg tænkte på
Avatar billede lifo Nybegynder
10. november 2004 - 17:43 #14
de programmer jeg laver er altid masser af tråde i så jeg pleje altid at lave mine meteder som opdaterer gui'en på denne måde
så slipper jeg for at tænke på om de skal invokes når jeg kalder dem

public void _tQueue_onThreadFinished(string tekst)
{
  if(InvokeRequired)
  {
    ThreadQue.UpdateThreadStatus del = new FindComputers.ThreadQue.UpdateThreadStatus(_tQueue_onThreadFinished);
    Invoke(del,new object[]{tekst});
    return;
  }
  ComputerStatusBar.Panels[4].Text="Shares: "+antalSharesFound+" "+tekst;
}
Avatar billede hald. Nybegynder
11. november 2004 - 00:09 #15
Hej igen lifo - du må undskylde at jeg er lidt langsom i betrækket til at svare :-)

Jeg synes efterhånden at jeg har prøvet alt, men jeg kan simpelthen ikke få det til at køre i det meget simple "PocketPC-projekt" som jeg ville teste det med i VS.NET...

Smide gerne en god sjat point oven i hatten til dig, hvis du kan få det til at køre... Eksempelvis bare på en simpel form, hvor du viser tiden (DateTime.Now) på en label (eller noget i den stil) samtidig med at din Main Thread kører videre...

Jeg skal nemlig bruge det i forbindelse med at applikationen genererer nogle
dynamiske komponenter (hvilket tager en smule tid), så brugeren kan se hvor langt tid der er igen af processen.

..tror du at du kan knække den ?
Avatar billede lifo Nybegynder
11. november 2004 - 10:30 #16
som sagt så har jeg aldrig lavet noget til CF
så jeg er måske ikke til så stor hjælp
jeg så i doc at InvokeRequired ikke eksisterer i CF så mit eksempel kan ikke bruges

men jeg biksede et lille eksempel sammen uden brug af invoke
det køret fint om jeg holt musen stille
men om jeg kom musen over lable't hvor jeg skrev teksten ud så frøs programmet
meget mærkeligt ????
Avatar billede hald. Nybegynder
11. november 2004 - 21:58 #17
Det er præcis det der sker for mig - skidtet fryser i det jeg "aktivere" min anden tråd. men du må da meget gerne poste dit eksempel... ellers er der ikke andet for at jeg må spendere min næste måneds SU på en CF-bog til Windows programmering ;-)
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