Avatar billede Slettet bruger
18. september 2006 - 10:08 Der er 14 kommentarer og
1 løsning

ASP.NET og threading

Hejsa,

Jeg har udviklet et program, der kan teste om et domæne er ledigt.
Selve logikken køres fra en klasse, der kaldes fra en .aspx side.

Der kan sommetider gå et stykke tid før svarer returneres, specielt hvis der søges på mange domæne-endelser til det samme domænenavn.

Jeg ville så høre om nogen kender en metode, hvor man kan lave en redirect mens der søges - til en anden side, hvor der fx. står "SØGER..." eller lignende, og hvor man herefter redirected/tranfers tilbage til den oprindelige side.

Kan dette laves med threading?
Jeg er totalt grøn i threading, men det er sådan set den eneste metode jeg kommer i tanke om lige nu og her...

Jeg tænker på en måde, hvor man kalder selve domænetester-metoden i en thread og derefter redirecter/ laver en Server.Transfer til den anden side og herefter, når resultatet er kommet (domænetester-metoden er afviklet) kommer tilbage til den oprindelige side med resultaterne fra testen.

Nogen bud?
Avatar billede dr_chaos Nybegynder
18. september 2006 - 10:13 #1
Du kan lave det med background worker og client script callback eller atlas framework.

Med en background worker kan du lave et arbejde som tager tid og rapportere tilbage til hovedtråden.
Ved f.eks. at noget client script callback kan du forespørge på status på din søgning f.eks. hvert 5 sekund.
Avatar billede dr_chaos Nybegynder
18. september 2006 - 10:13 #2
Det kræver dog at du bruger asp.net 2.0.

Du kan også lave en mellem side som gør det samme.
Avatar billede Slettet bruger
18. september 2006 - 10:25 #3
Hejsa.

Jeg bruger 2.0.
Har du et bud på hvordan det rent teknisk sættes op?

Jeg har som sagt en side, domaenester.aspx, hvor validaeringen af det indtastede foregår og hvor metoden i klassen kaldes, hvor der laves en test.

Denne metode er en bool, som altså så returnerer sandt eller falsk afhængig af om domænet er ledigt eller ej.

Kan jeg lave det sådan, at domæenetester.aspx kalder denne metode fra sin dodebehind fil og derefter laver en server.transfer() til en anden side indtil der kommer svar tilbage fra metoden i klassen hvor domænet testes?
Avatar billede dr_chaos Nybegynder
18. september 2006 - 10:41 #4
Ja det kan du godt.
Du kan bruge backgroundworkercompleted eventet til at bestemme når dit job er færdigt.

Den side som du sender brugeren til skal være der hvor background workeren er sat op og der hvor din metode kaldes fra.
Avatar billede dr_chaos Nybegynder
18. september 2006 - 10:43 #5
Her er et lille eksempel på en background worker jeg tidligere har brugt

private void InitializeBgWorker()
        {
            this.bgWorker.ProgressChanged += new ProgressChangedEventHandler(bgWorker_ProgressChanged);
            this.bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorker_RunWorkerCompleted);
            this.bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
            //start indlæsningen;
            this.bgWorker.RunWorkerAsync();
        }

        void bgWorker_DoWork(object sender, DoWorkEventArgs e)
        {
       
            BackgroundWorker bgw = sender as BackgroundWorker;
            //kalder en metoder som loader subjects i en helpdesk
            s.LoadSubjects(bgw);
            //Class.Subjects.Loadsubjects(bgw, MainForm.SubjectsBindingSource);
        }

        void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            //her kan du evt sende brugeren til din side og hvis resultatet.
this.Dispose();
        }

        void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
          //her kan du lave noget status
        }
Avatar billede dr_chaos Nybegynder
18. september 2006 - 10:44 #6
metoden som bliver kaldt:
public void LoadSubjects(BackgroundWorker bgw)
        {
            //simplificeret form
            for (int i = 0; i < 1000; i++)
            {
                bgw.ReportProgress(i);
                System.Threading.Thread.Sleep(1);
            }
        }
Avatar billede Slettet bruger
18. september 2006 - 10:51 #7
Jeg kan ikke lige gennemskue hvordan din kode virker og det virker heller ikke som om det er det jeg selv skal bruge.

Jeg er ikke i tvivl om at man KAN køre det med threading, men snarere hvordan jeg skifter mellem to forskellige asp.net sider mens tråden afvikles.

Jeg vil jo gerne vise brugeren at der sker noget i stedet for at vise en hvid skærm.

Så det må vek kunne laves rimelig simpelt, noget med:
- Kald metode (domænetest) i en tråd
- Server.Tranfer("temp.aspx");
- Vis oprindelig side når metoden er gennemført - Vis domaenetester.aspx med resultatet fra metoden, der blev kaldt.

Jeg ved godt jeg får det til at lyde enkelt og hvorfor laver jeg det ikke bare selv?
Men jeg kan ikke lige gennemskue hvordan man bruger threading på denne måde :-(
Avatar billede dr_chaos Nybegynder
18. september 2006 - 10:57 #8
Personligt ville jeg ikke lave 2 sider.
Jeg ville beholde en side og lave et simpelt clientscript call back til et label på den oprindelige side som viser brugeren at søgningen er igang.
På den måde er du hele tiden på den samme side og du skal ikke tænke over at overfører objekter fra en side til en anden.
Avatar billede Slettet bruger
18. september 2006 - 11:35 #9
God ide!
Kan man lave det sådan, at det oprindelige indhold skjules mens metoden afvikles?

Jeg tænker på en placeholder, hvor controls udskiftes mens?
Avatar billede dr_chaos Nybegynder
18. september 2006 - 11:53 #10
Ja det kan du godt men det kræver så nok at du bruger atlas framework og deres update panel.
Ellers skal du lave 2 div som du skjuler via din javascript som modtager kald fra serveren.

Update panel er nok det nemmeste.
Avatar billede Slettet bruger
18. september 2006 - 17:30 #11
Ok. Og tak for input!
Havde du et eksempel hvor der bruges en tråd som i det tilfælde jeg beskriver?
Avatar billede dr_chaos Nybegynder
18. september 2006 - 19:18 #12
jeg har faktisk fundet et eksempel som gør præcis det som du vil:
http://www.eggheadcafe.com/articles/20051223.asp
Avatar billede dr_chaos Nybegynder
18. september 2006 - 19:28 #13
Du kan måske også bruge dette her til at vise en form for progressbar:
http://www.codeproject.com/useritems/InPageProgressWithCancel.asp
Avatar billede Slettet bruger
30. september 2006 - 16:45 #14
Jeg kommer ikke videre med emnet her foreløbig, men smid et svar. Du er den, der har været tættest på en løsning :-)
Avatar billede dr_chaos Nybegynder
30. september 2006 - 16:54 #15
fair nok svar :)
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