Avatar billede schubert1 Nybegynder
26. juni 2008 - 13:27 Der er 1 kommentar og
1 løsning

Tråde

Hej eksperter.

Jeg har en form hvori der findes to progressbarer og en label.

Den ene progressbar (ProgressBar1) bliver opdateret i den oprindelige GUI-tråd.
Den anden progressbar (ProgressBar2), og labelen, skal blive opdateret i en anden tråd.

Jeg har i midlertid et problem.

Jeg har forsøgt med de gængse metoder som:

if (this.ProgressBar2.InvokeRequired)
{
                SetToZero rem = new SetToZero(_Downloader_FileDownloadSizeObtained);
                this.ProgressBar2.Invoke(rem, new object[] {iFileSize});
            }
            else
            {
                this.ProgressBar2.Value = 0;
                this.ProgressBar2.Maximum = Convert.ToInt32(iFileSize);
            }

Og

this.ProgressBar2.Invoke(new MethodInvoker(delegate
                {
                    ProgressBar2.Value = ProgressBar2.Maximum;
                }));


Dog får disse to hele applicationen til at fryse når der bliver Invoket.
Jeg har derfor forsøgt med BeginInvoke istedet, men her fryser GUIEN kun...
Hvordan skal jeg løse dette problem?
På forhånd tak :)
Avatar billede aaberg Nybegynder
26. juni 2008 - 14:21 #1
Jeg tror du oplever en deadlock, som kan opstå hvis flere tråde prøver at gøre det samme samtiddig. Hvis du bruger Invoke imens at UI tråden er optaget, vil Invoke fryse indtil UI tråden bliver idle igen. Jeg tror det er dette som sker i dit tilfælde.

Jeg vil råde dig til at se på en BackgroundWorker. Den er meget nemmere og sikre at bruge end Thread og ThreadPool klasserne. Og så vil jeg råde dig til at gøre alt arbejdet fra en eller flere BackgroundWorker instanser. Hvis noget arbejde køre fra UI tråden, vil dette som sagt låse for alle Invokes.
Avatar billede schubert1 Nybegynder
09. juli 2008 - 16:42 #2
Tja har ikke fundet ud af det endnu... så lukker spørgsmålet...
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