Tratando de seguir la hints laid out here, pero ella no menciona cómo manejar la situación cuando su recogida tiene que devolver un valor, así:¿Devolviendo objetos de otro hilo?
private delegate TValue DequeueDelegate();
public virtual TValue Dequeue()
{
if (dispatcher.CheckAccess())
{
--count;
var pair = dict.First();
var queue = pair.Value;
var val = queue.Dequeue();
if (queue.Count == 0) dict.Remove(pair.Key);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, val));
return val;
}
else
{
dispatcher.BeginInvoke(new DequeueDelegate(Dequeue));
}
}
Esto, obviamente, no va a funcionar, porque dispatcher.BeginInvoke
no vuelve cualquier cosa. ¿Que se supone que haga?
Esa publicación de blog tiene 4 años y todavía no la han reparado :( – mpen
+1 Me gustaría ver las respuestas a esta pregunta porque tengo que hacer algo similar en un proyecto propio. –