的在.NET中,Windows 8和Windows Phone 7的我有類似下面的代碼:便攜式類庫相當於Dispatcher.Invoke或Dispatcher.RunAsync
public static void InvokeIfRequired(this Dispatcher dispatcher, Action action)
{
if (dispatcher.CheckAccess())
{
action();
}
else
{
dispatcher.Invoke(action);
}
}
我怎麼會做便攜式類庫的東西嗎?有一個平臺不可知的實現這將是很好的。我的想法是使用WP7中不可用的TPL,但一定會很快。
// 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);
}
}
我不確定的唯一的事情就是性能的影響。也許我會做一些測試。
不錯。看起來你創建了一個類,但只是把這個方法發佈給其他人。在調用方法之前,必須在想要操作的線程中分配this.synchronizationContext。我實際上修改了一下,並創建了一個擴展:public Task RunAsync(此SynchronizationContext上下文,Action action)。現在它更像原來的答案,因爲它可以單獨使用。兩種答案都是最好的。 :) – Wes