Establecer ApartmentState en una tarea

Estoy intentando establecer el estado del departamento en una tarea, pero no veo ninguna opción para hacerlo. ¿Hay alguna manera de hacer esto usando una Tarea?

for (int i = 0; i < zom.Count; i++) { Task t = Task.Factory.StartNew(zom[i].Process); t.Wait(); } 

Cuando StartNew falla, hágalo usted mismo:

 public static Task StartSTATask(Func func) { var tcs = new TaskCompletionSource(); Thread thread = new Thread(() => { try { tcs.SetResult(func()); } catch (Exception e) { tcs.SetException(e); } }); thread.SetApartmentState(ApartmentState.STA); thread.Start(); return tcs.Task; } 

(Puede crear uno para Task que se verá casi idéntico, o agregar sobrecargas para algunas de las diversas opciones que tiene StartNew ).

Por ejemplo, podría hacer una nueva tarea de la siguiente manera:

  try { Task reportTask = Task.Factory.StartNew( () => { Report report = new Report(this._manager); report.ExporterPDF(); } , CancellationToken.None , TaskCreationOptions.None , TaskScheduler.FromCurrentSynchronizationContext() ); reportTask.Wait(); } catch (AggregateException ex) { foreach(var exception in ex.InnerExceptions) { throw ex.InnerException; } } 

Una sobrecarga de la respuesta de Servy para comenzar una tarea vacía

 public static Task StartSTATask(Action func) { var tcs = new TaskCompletionSource(); var thread = new Thread(() => { try { func(); tcs.SetResult(null); } catch (Exception e) { tcs.SetException(e); } }); thread.SetApartmentState(ApartmentState.STA); thread.Start(); return tcs.Task; }