解决.NET 4.0中SynchronizationContext.Current为空的问题

在.NET 4.0的主线程上, SynchronizationContext.Current意外为空的问题的解决方法是什么? 看到:

  • 在主UI线程的Continuation中,SynchronizationContext.Current为null

我创建了几个与ContinueWithStartNew匹配的扩展方法,除了它们还需要一个额外的SyncronizationContext 。 然后我使用此参数在执行操作之前恢复预期的SynchronizationContext

下面,我给出了一些例子:

 public static class TaskExtensionMethods { public static Task ContinueWith_UsingSyncContextWorkaround(this Task task, Action continuationAction, CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, TaskScheduler scheduler, SynchronizationContext sc) { Action actionWithWorkaround = t => { SynchronizationContext.SetSynchronizationContext(sc); continuationAction(t); }; return task.ContinueWith(actionWithWorkaround, cancellationToken, continuationOptions, scheduler); } public static Task StartNew_UsingSyncContextWorkaround(this TaskFactory taskFactory, Action action, CancellationToken cancellationToken, TaskCreationOptions creationOptions, TaskScheduler scheduler, SynchronizationContext sc) { Action actionWithWorkaround = () => { SynchronizationContext.SetSynchronizationContext(sc); action(); }; return taskFactory.StartNew(actionWithWorkaround, cancellationToken, creationOptions, scheduler); } } 

然后我使用这些扩展方法代替.StartNew.StartNew

相关问题:

  • 如何创建一个通用的Task.ContinueWith扩展方法