Avatar billede Droa Seniormester
06. maj 2013 - 10:52 Der er 5 kommentarer og
1 løsning

delegates mellem 3 tråde

Hej eksperter.

Jeg er igang med et lille udp projekt.

Jeg har lavet 3 tråde, 1 modtager tråd, en sendetråd, også selve projekt tråden.


jeg initializered UdpClient variablen(socket), sende(sndMsg) og modtager(rcvMsg) tråden ligger også i main tråden.

alle funktioner og subs ligger i main tråden

Send() ' socket.send()
GetByteData() ' socket.Receive()
GetAvailableData() ' socket.Available
Close() ' socket.Close()


jeg har derefter initializered deres delegates inde i sende og modtager tråden, efter hvad der har været brug for.


men mit spørgsmål er om der ikke er en lettere måde at arbejde med delte variabler?

jeg fandt ud af at selvom sende og modtager tråden er dannet ud fra subs fra samme classe som main tråde er fra, så deler den ikke variablerne, men istedet danner den cloner af dem.

og siden jeg ikke ville have 3 sockets, med samme IpEndPoint, men bare en så den er lettere at styre, har jeg prøvet at gøre det muligt med delegates.. men det så ser rodet ud.
Avatar billede ggxdg Nybegynder
07. maj 2013 - 14:00 #1
http://stackoverflow.com/questions/581405/what-is-the-easiest-way-to-do-cross-thread-winforms-stuff

Jeg ledte efter et alternativ til delegates, ofrdi jeg også synes det er for rodet. Jeg fandt ovenstående. Et stykke nede på siden er der en der foreslår en løsning, men det er med C# kode:
SynchronizationContext context = SynchronizationContext.Current;

// Later on
private void SetButton(Button button, string label)
{
    context.Send(delegate
        {
            button.Text = label;
        }, null);
}

Hvis du kan få noget i den retning til at fungere i VB .NET, må du meget gerne lige give lidt hints her. Jeg kan ikke helt gennemskue VB .NET versionen af .Send

Det første, kan vidst nogenlunde oversættes til:
Private context As System.Threading.SynchronizationContext = System.Windows.Forms.WindowsFormsSynchronizationContext.Current
Avatar billede ggxdg Nybegynder
07. maj 2013 - 14:02 #2
Ah - der var jeg nok lidt ivrig. Det kan være det kun virker med forms.
Avatar billede Droa Seniormester
07. maj 2013 - 14:08 #3
det tror jeg os, det virker bare til et en en form for buildin automatisering af invokes :)
Avatar billede ggxdg Nybegynder
07. maj 2013 - 14:10 #4
Min oversættelse, var nok ikke lige den helt rigtige, ift. koden:
http://msdn.microsoft.com/en-us/library/system.threading.synchronizationcontext.aspx
Avatar billede Droa Seniormester
07. maj 2013 - 15:07 #5
Det lyder ret kompliceret, jeg vil lige prøve at lege med det senere, og se om jeg kan bruge det :),@@@@@@@@@
Avatar billede Droa Seniormester
17. december 2014 - 23:19 #6
nogen der stadig ville have point?
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