Dopo aver chiesto this question, mi chiedo se è possibile attendere che venga generato un evento, quindi ottenere i dati dell'evento e restituirne una parte. Un modo simile al seguente:Come bloccare fino a quando un evento viene attivato C#
private event MyEventHandler event;
public string ReadLine(){ return event.waitForValue().Message; }
...
event("My String");
...elsewhere...
var resp = ReadLine();
Assicurati che qualsiasi soluzione fornita restituisca direttamente il valore piuttosto che ottenerlo da qualcos'altro. Sto chiedendo se il metodo sopra è disponibile in qualche modo. Conosco Auto/ManuelResetEvent, ma non so che restituiscono il valore direttamente come ho fatto sopra.
Aggiornamento: Ho dichiarato un evento utilizzando MyEventHandler
(che contiene un campo Message
). Ho un metodo in un altro thread chiamato ReadLine
in attesa dell'inizio dell'evento. Quando l'evento attiva il metodo WaitForValue (parte della scena di gestione degli eventi) restituisce l'evento args, che contiene il messaggio. Il messaggio viene quindi restituito da ReadLine a qualsiasi cosa lo abbia chiamato.
The accepted answer a that question Ho chiesto cosa fosse, ma non mi sembra giusto. Sembra quasi che qualcosa potrebbe accadere ai dati tra l'attivazione di ManuelResetEvent e il programma che recupera i dati e li restituisce.
Aggiornamento: Il problema principale con Auto/ManualResetEvent
è che è troppo vulnerabile. Un thread potrebbe attendere l'evento e quindi non dare abbastanza tempo a chiunque altro per ottenerlo prima di cambiarlo in qualcos'altro. C'è un modo per usare le serrature o qualcos'altro? Forse usando le istruzioni get e set.
che dire di un ciclo while: 'while (someGlobalvar);' 'cahnge someGlobalvar' in una funzione si Asign all'evento. – elyashiv
è in attesa, ed è una pessima soluzione –
Ora, 2 anni dopo, sembra che dovrei solo rendere WaitTwo che restituirebbe un oggetto, e '* ResetEvent.Set (dati dell'oggetto)'. Avrei ancora bisogno di preoccuparmi dei riferimenti agli oggetti, ma è normale. Almeno il puntatore non cambierebbe. –