Avatar billede heinzdmx Nybegynder
20. september 2010 - 18:08 Der er 6 kommentarer og
1 løsning

Multithreading -> feedback efter metoden er færdig

Jeg har en WebRequest hvor jeg sender en post værdi afsted, herefter modtager jeg så svaret fra serveren og beregner hvad der skal ske alt efter retursvaret. Dette virker fint nok, desværre så tager WebRequesten bare lidt tid, hvori at mit GUI går over i "Svarer ikke".

Jeg ved det kan løses med multithreading, problemet er bare at når den er færdig, vil jeg gerne have at der kommer et ballontip fra mit notifyIcon frem.

Jeg kan ikke finde nogen invoke metode på notifyIcon, og synes heller ikke det virkede at refere til den.

Desuden vil jeg gerne sørge for at der kun kan startes en WebRequest ad gangen, til det vil jeg deaktivere knappen der sætter det i gang, men er der en måde at sørge for at det ikke sker selv hvis det bliver gjort ved en fejl i koden?

Kort sagt:
Hvordan viser jeg et ballontip fra en anden tråd? Eller evt. får svar retur til GUI tråden så den kan vise ballontip?

Og sørger for at der kun kan være en ting i "køen" til det, skal jeg her bruge queue?
Avatar billede lasserasch Juniormester
20. september 2010 - 20:02 #1
løsningen er : backgroundworker.

1. den smider en sigende exception hvis man forsøger at starte en tråd mens noget andet kører.

2. du har et event som fyres af når tråden er afsluttet som du kan hooke dig op på. og metoden i det event kører i din UI tråd og du kan derfor vise din ballon uden videre :-)


Mvh.
Lasse
Avatar billede heinzdmx Nybegynder
21. september 2010 - 12:20 #2
Jeg kigger på backgroundworker, kan du evt, give et link til en forklaring der kommet godt omkring funktionen bag det?

Det med Do_Work og event osv.
Avatar billede lasserasch Juniormester
21. september 2010 - 12:58 #3
Avatar billede janus_007 Nybegynder
22. september 2010 - 10:50 #4
hmm ja jo... Jeg ville måske... Er det en winform forresten?
Avatar billede heinzdmx Nybegynder
22. september 2010 - 10:57 #5
Ja det er WinForm
Overvejer lidt på et tidspunkt at ændre det til WPF, men der går nok et pænt stykke tid før det sker.

Med henhold til baggroundworker så vender jeg tilbage Lasse når jeg har set om jeg kan få det til at spille som jeg vil
Avatar billede janus_007 Nybegynder
22. september 2010 - 10:59 #6
hmm.. ja, altså hvis det er så ville jeg benytte en TaskScheduler, noeget alá:

TaskScheduler  _taskScheduler; 
        public Form1()
        {
            InitializeComponent();
         
            _taskScheduler = TaskScheduler.FromCurrentSynchronizationContext();
            Task.Factory.StartNew<string> (LongRunningWebRequest)
            .ContinueWith (x => DoSomeThingWithResult(x), _tastScheduler);
        }
       
string LongRunningWebRequest()
{
return bliblob....
}
void DoSomeThingWithResult<T>(Task<T> cb)
{
notifyBalloon.Visible = true;
var html = cb.Result;
}
Avatar billede heinzdmx Nybegynder
03. oktober 2010 - 23:27 #7
Jeg har endnu ikke fået prøvet det af, men jeg er ret så sikker på at det var hvad Lasse skrev med en backgrounworker og et link til at komme igang jeg skal bruge. Jeg giver derfor Lasse point.

Men tak for pointen omkring en taskscheduler
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