Taşınabilir sınıf kütüphanesi eşdeğer Ben buna benzer bir kod vardır:.NET, Windows 8 ve Windows Phone 7'de Dispatcher.Invoke veya Dispatcher.RunAsync
public static void InvokeIfRequired(this Dispatcher dispatcher, Action action)
{
if (dispatcher.CheckAccess())
{
action();
}
else
{
dispatcher.Invoke(action);
}
}
nasıl taşınabilir sınıf kitaplığında bir şey yapsın? Bunun bir platformun agnostik uygulamasının olması güzel olurdu. Benim fikrim, WP7’de mevcut olmayan TPL’i kullanmaktır, ancak kesinlikle yakında olacaktır.
// 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);
}
}
Emin olmadığım tek şey bunun performans açısından ne anlama geleceğidir. Belki bazı testler yapacağım.
Güzel sorar. Bir sınıf oluşturduğunuza benziyor ancak sadece yöntemi başkaları için (belki de açık) bir not olarak gönderiyorsunuz. this.synchronizationContext, yöntemi çağırmadan önce işlemin yürütülmesini istediğiniz iş parçacığına atanmalıdır. Aslında biraz üzerinde değişiklik yaptım ve bir uzantı yarattım: public Task RunAsync (bu SynchronizationContext içeriği, Eylem eylemi). Artık tek başına durabildiği için orijinal cevabı gibi. Her iki cevabın en iyisi. :) – Wes