Quantcast
Channel: Visual Basic Tips and Tricks
Viewing all articles
Browse latest Browse all 2212

Delegate con parametri in un thread

$
0
0

Per risolvere un mio precedente problema (simulare un led che lampeggia) mi era stato suggerito di ricorrere a delegate e thread paralleli. Non essendo proprio un'aquila con quegli argomenti ed avendo altre priorità da risolvere, ho accantonato per un po' il problema.

Ora lo sto riaffrontando, ma mi trovo di fronte a qualche ostacolo che non saprei affrontare.

La soluzione adottata:

Dichiaro il delegate:

Private delegate sub BlinkLed(byval P1 as Uinteger, P2 as Uinteger)

Dichiaro una variabile di controllo del ciclo:

Private RunThread as boolean=False

dichiaro un Thread:

Private ThreadBlink as Threading.Thread

La Routine di lampeggio (che sarà chiamata dal delegate):

PrivateSub Blinking(ByVal Vl AsUInt16, ByVal V2 AsUInteger)

Try

'la variabile V2 non fa nulla, è presente solo per completezza del progetto 

If Vl = 0 Then

LedGreen.Visible = False

LedRed.Visible = True

Application.DoEvents()

Else

LedGreen.Visible = True

LedRed.Visible = False

Application.DoEvents()

EndIf

Catch ex AsException

MessageBox.Show("Errore Blinking")

EndTry

EndSub

   

 

La Routine Delegate:

 

PrivateSub DelBlink(V1 AsUint16r, V2 AsUint16)

'Anche qui le variabili sono poco più che dei segnaposto, servono per l'esempio 

Dim V AsUInteger = V1

Try

DoWhile RunTh

Me.Invoke(NewBlinkLed(AddressOf Blinking), V, V2)

Threading.Thread.Sleep(150)

V = 0

 

Me.Invoke(NewBlinkLed(AddressOf Blinking), V, V2)

Threading.Thread.Sleep(150)

V = 1

 

Loop

Catch ex AsException

MessageBox.Show("ERRORE DelBlink")

EndTry

EndSub

 La chiamata di un nuovo thread che per comodità è legata ad un bottone premuto:

 

PrivateSub Button1_Click(sender AsObject, e AsEventArgs) Handles Button1.Click

Try

RunThread = Not RunThread

If RunThread Then

ThreadBlink = New Threading.Thread(AddressOf DelBlink)

ThreadBlink.Start()

 

EndIf

Catch ex AsException

MessageBox.Show("Errore Bottone")

EndTry

EndSub

 Il Problema:

Se il delegate DelBlink non prevedesse alcun parametro tutto funzionerebbe (ovviamente anche "a valle" non ci sarebbero i relativi parametri).

Viceversa coi parametri non so dove caspita indicarli: se non li metto (come nell'esempio) e mi riservo di fornirli con il metodo Start ottengo un errore  "Risoluzione dell'overload non riuscita perché nessun 'New' accessibile può essere  chiamato con questi argomenti"

Se li indico come si fa normalmente per una chiamata ad una routine

ThreadBlink = New Threading.Thread(AddressOf DelBlink(Parametro,parametro2))

Ottengo l'errore per cui "L'operando AddressOf deve essere il nome di un metodo, senza parentesi"

Non mi è chiaro come debbo comportarmi e dal supporto Microsoft non sono riuscito a capire alcunché.

Qualcuno mi saprebbe guidare per cortesia?

Grazie a tutti

Beppe


Viewing all articles
Browse latest Browse all 2212

Trending Articles


HOY PANGIT, MAGBAYAD KA!


Henry el monstruo feliz para colorear e imprimir


Dama y vagabundo para pintar


Girasoles para colorear


Good Morning Quotes


RE: Mutton Pies (jameskoiman)


Hagibis (1946) by Francisco V. Coching


Ka riam ka beit bad ka por riam


Vimeo Create - Video Maker & Editor 1.6.0 by Vimeo Inc


Vimeo 3.42.1 by Vimeo Inc