En .NET, Windows 8 y Windows Phone 7 Tengo un código similar a este:portátil biblioteca de clases equivalente de Dispatcher.Invoke o Dispatcher.RunAsync
public static void InvokeIfRequired(this Dispatcher dispatcher, Action action)
{
if (dispatcher.CheckAccess())
{
action();
}
else
{
dispatcher.Invoke(action);
}
}
¿Cómo iba a hacer algo en la biblioteca de clases portátil? Sería bueno tener una implementación agnóstica de esta plataforma. Mi idea es usar el TPL que no está disponible en WP7, pero definitivamente lo será pronto.
// PortableDispatcher must be created on the UI thread and then made accessible
// maybe as a property in my ViewModel base class.
public class PortableDispatcher
{
private TaskScheduler taskScheduler = TaskScheduler.FromCurrentSynchronizationContext();
public void Invoke(Action action)
{
if (Alread on UI thread. How would I do this.)
{
action();
}
Task.Factory.StartNew(
action,
CancellationToken.None,
TaskCreationOptions.None,
taskScheduler);
}
}
Lo único que no estoy seguro es cuáles serán las implicaciones de rendimiento de esto. Quizás haga algunas pruebas.
Nice. Parece que creó una clase, pero solo publicó el método, por lo que una nota (tal vez obvia) para los demás. this.synchronizationContext tiene que asignarse en la secuencia en la que desea que se ejecute la acción antes de llamar al método. De hecho, modifiqué un poco y creé una extensión: tarea pública RunAsync (este contexto SynchronizationContext, acción Acción). Ahora es más como una respuesta original, ya que puede ser independiente. Lo mejor de ambas respuestas. :) – Wes