.NET、Windows 8、および Windows Phone 7 には、次のようなコードがあります。
public static void InvokeIfRequired(this Dispatcher dispatcher, Action action)
{
if (dispatcher.CheckAccess())
{
action();
}
else
{
dispatcher.Invoke(action);
}
}
ポータブル クラス ライブラリで何かを行うにはどうすればよいですか? プラットフォームにとらわれない実装が 1 つあると便利です。私の考えは、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);
}
}
私が確信していない唯一のことは、これがパフォーマンスにどのような影響を与えるかです。おそらく私はいくつかのテストを行います。